|
OpenVMS Utility Routines Manual
9.2.1 The utc Structure
Coordinated Universal Time (UTC) is useful for measuring time across
local time zones and for avoiding the seasonal changes (summer time or
daylight saving time) that can affect the local time. DECdts uses
128-bit binary numbers to represent time values internally; throughout
this manual, these binary numbers representing time values are referred
to as binary timestamps. The DECdts
utc
structure determines the ordering of the bits in a binary timestamp;
all binary timestamps that are based on the
utc
structure contain the following information:
- The count of 100-nanosecond units since 00:00:00.00, 15 October
1582 (the date of the Gregorian reform to the Christian calendar)
- The count of 100-nanosecond units of inaccuracy applied to the above
- The time differential factor (TDF), expressed as the signed quantity
- The timestamp version number
The binary timestamps that are derived from the DECdts
utc
structure have an opaque format. This format is a cryptic character
sequence that DECdts uses and stores internally. The opaque binary
timestamp is designed for use in programs, protocols, and databases.
Note
Applications use the opaque binary timestamps when storing time values
or when passing them to DECdts.
|
The API provides the necessary routines for converting between opaque
binary timestamps and character strings that can be displayed and read
by users.
9.2.2 The tm Structure
The
tm
structure is based on the time in years, months, days, hours, minutes,
and seconds since 00:00:00 GMT (Greenwich Mean Time), 1 January 1900.
The
tm
structure is defined in the
<time.h>
header file.
The
tm
structure declaration follows:
struct tm {
int tm_sec; /* Seconds (0 - 59) */
int tm_min; /* Minutes (0 - 59) */
int tm_hour; /* Hours (0 - 23) */
int tm_mday; /* Day of Month (1 - 31) */
int tm_mon; /* Month of Year (0 - 11) */
int tm_year; /* Year - 1900 */
int tm_wday; /* Day of Week (Sunday = 0) */
int tm_yday; /* Day of Year (0 - 364) */
int tm_isdst; /* Nonzero if Daylight Savings Time */
/* is in effect */
};
|
Not all of the
tm
structure fields are used for each routine that converts between
tm
structures and
utc
structures. See the parameter descriptions that accompany the routines
in Chapter 9 for additional information about which fields are used
for specific routines.
9.2.3 The timespec Structure
The
timespec
structure is normally used in combination with or in place of the
tm
structure to provide finer resolution for binary times. The
timespec
structure is similar to the
tm
structure, but the
timespec
structure specifies the number of seconds and nanoseconds since the
base time of 00:00:00 GMT, 1 January 1970.
You can find the structure in the
<utc.h>
header file.
The
timespec
structure declaration follows:
struct timespec {
unsigned long tv_sec; /* Seconds since 00:00:00 GMT, */
/* 1 January 1970 */
long tv_nsec; /* Additional nanoseconds since */
/* tv_sec */
} timespec_t;
|
9.2.4 The reltimespec Structure
The
reltimespec
structure represents relative time. This structure is similar to the
timespec
structure, except that the first field is signed in the
reltimespec
structure. (The field is unsigned in the
timespec
structure.)
You can find the
reltimespec
structure in the
<utc.h>
header file.
The
reltimespec
structure declaration follows:
struct reltimespec {
long tv_sec; /* Seconds of relative time */
long tv_nsec; /* Additional nanoseconds of */
/* relative time */
} reltimespec_t;
|
9.2.5 The OpenVMS Time Structure
The OpenVMS time structure is based on Smithsonian time, which has a
base date of November 17, 1858. The binary OpenVMS structure is a
signed, 64-bit integer that has a positive value for absolute times.
You can use the DECdts API to translate an OpenVMS structure
representing an absolute time to or from the DECdts UTC-based binary
timestamp.
9.3 DECdts API Header Files
On OpenVMS systems, the header files are located in the SYS$LIBRARY
directory. The
<time.h>
and
<utc.h>
header files contain the data structures, type definitions, and define
statements that are referenced by the DECdts API routines. The
<time.h>
header file is present on all OpenVMS systems. The
<utc.h>
header file includes
<time.h>
and contains the
timespec
,
reltimespec
, and
utc
structures.
9.4 Linking Programs with the DECdts API
The DECdts API is implemented by a shared image. To use the API with
your program, you must link the program with this shared image. On
DECnet-Plus for OpenVMS systems, the DECdts API is implemented by the
shared image SYS$LIBRARY:DTSS$SHR.EXE. The following example shows how
to link a program with the DECdts shared image:
$ CC MYPROGRAM.C/OUTPUT=MYPROGRAM.OBJ
$ LINK MYPROGRAM.OBJ, SYS$INPUT:/OPTIONS[Return]
SYS$LIBRARY:DTSS$SHR.EXE/SHARE[Ctrl-z]
$
|
9.5 DECdts API Routine Functions
Figure 9-5 categorizes the DECdts portable interface routines by
function.
Figure 9-5 DTS Portable Interface Categories
An alphabetical listing of the DECdts portable interface routines and a
brief description of each one follows:
utc_abstime
|
Computes the absolute value of a binary relative time.
|
utc_addtime
|
Computes the sum of two binary timestamps; the timestamps can be two
relative times or a relative time and an absolute time.
|
utc_anytime
|
Converts a binary timestamp into a
tm
structure, using the TDF information contained in the timestamp to
determine the TDF returned with the
tm
structure.
|
utc_anyzone
|
Gets the time zone label and offset from GMT, using the TDF contained
in the input
utc
.
|
utc_ascanytime
|
Converts a binary timestamp into an ASCII string that represents an
arbitrary time zone.
|
utc_ascgmtime
|
Converts a binary timestamp into an ASCII string that expresses a GMT
time.
|
utc_asclocaltime
|
Converts a binary timestamp to an ASCII string that represents a local
time.
|
utc_ascreltime
|
Converts a binary timestamp that expresses a relative time to its ASCII
representation.
|
utc_binreltime
|
Converts a relative binary timestamp into
timespec
structures that express relative time and inaccuracy.
|
utc_bintime
|
Converts a binary timestamp into a
timespec
structure.
|
utc_boundtime
|
Given two UTC times, one before and one after an event, returns a
single UTC time whose inaccuracy includes the event.
|
utc_cmpintervaltime
|
Compares two binary timestamps or two relative binary timestamps.
|
utc_cmpmidtime
|
Compares two binary timestamps or two relative binary timestamps,
ignoring inaccuracies.
|
utc_gettime
|
Returns the current system time and inaccuracy as an opaque binary
timestamp.
|
utc_getusertime
|
Returns the time and process-specific TDF, rather than the
system-specific TDF.
|
utc_gmtime
|
Converts a binary timestamp into a
tm
structure that expresses GMT or the equivalent UTC.
|
utc_gmtzone
|
Gets the time zone label and zero offset from GMT, given
utc
.
|
utc_localtime
|
Converts a binary timestamp into a
tm
structure that expresses local time.
|
utc_localzone
|
Gets the time zone label and offset from GMT, given
utc
.
|
utc_mkanytime
|
Converts a
tm
structure and TDF (expressing the time in an arbitrary time zone) into
a binary timestamp.
|
utc_mkascreltime
|
Converts a null-terminated character string, which represents a
relative timestamp to a binary timestamp.
|
utc_mkasctime
|
Converts a null-terminated character string, which represents an
absolute timestamp, to a binary timestamp.
|
utc_mkbinreltime
|
Converts a
timespec
structure expressing a relative time to a binary timestamp.
|
utc_mkbintime
|
Converts a
timespec
structure into a binary timestamp.
|
utc_mkgmtime
|
Converts a
tm
structure that expresses GMT or UTC to a binary timestamp.
|
utc_mklocaltime
|
Converts a
tm
structure that expresses local time to a binary timestamp.
|
utc_mkreltime
|
Converts a
tm
structure that expresses relative time to a binary timestamp.
|
utc_mkvmsanytime
|
Converts a binary OpenVMS format time and TDF (expressing the time in
an arbitrary time zone) to a binary timestamp.
|
utc_mkvmsgmtime
|
Converts a binary OpenVMS format time expressing GMT (or the equivalent
UTC) into a binary timestamp.
|
utc_mkvmslocaltime
|
Converts a local binary OpenVMS format time to a binary timestamp,
using the host system's TDF.
|
utc_mulftime
|
Multiplies a relative binary timestamp by a floating-point value.
|
utc_multime
|
Multiplies a relative binary timestamp by an integer factor.
|
utc_pointtime
|
Converts a binary timestamp to three binary timestamps that represent
the earliest, most likely, and latest time.
|
utc_reltime
|
Converts a binary timestamp that expresses a relative time into a
tm
structure.
|
utc_spantime
|
Given two (possibly unordered) UTC timestamps, returns a single UTC
time interval whose inaccuracy spans the two input timestamps.
|
utc_subtime
|
Computes the difference between two binary timestamps that express two
relative times (an absolute time and a relative time, two relative
times, or two absolute times).
|
utc_vmsanytime
|
Converts a binary timestamp to a binary OpenVMS-format time, using the
TDF contained in the binary timestamp.
|
utc_vmsgmtime
|
Converts a binary timestamp to a binary OpenVMS-format time expressing
GMT or the equivalent UTC.
|
utc_vmslocaltime
|
Converts a binary timestamp to a local binary OpenVMS format time,
using the host system's time differential factor.
|
Notes
Absolute time is a point on a time scale; absolute
time measurements are derived from system clocks or external
time-providers. For DECdts, absolute times reference the UTC standard
and include the inaccuracy and other information. When you display an
absolute time, DECdts converts the time to ASCII text, as shown in the
following display:
1996-11-21-13:30:25.785-04:00I000.082
|
Relative time is a discrete time interval that is
usually added to or subtracted from an absolute time. A time
differential factor (TDF) associated with an absolute time is one
example of a relative time. Note that a relative time does not use the
calendar date fields, because these fields concern absolute time.
Coordinated Universal Time (UTC) is the international
time standard that DECdts uses. The zero hour of UTC is based on the
zero hour of Greenwich Mean Time (GMT). The documentation consistently
refers to the time zone of the Greenwich Meridian as GMT. However, this
time zone is also sometimes referred to as UTC.
The time differential factor (TDF) is the difference
between UTC and the time in a particular time zone.
OpenVMS systems do not have a default time zone rule. You select a time
zone by defining
sys$timezone_rule
during the
sys$manager:net$configure.com
procedure, or by explicitly defining
sys$timezone_rule
.
Unless otherwise specified, the default input and output parameters for
the DECDts API routine commands are as follows:
- If
utc
is not specified as an input parameter, the current time is used.
- If
inacc
is not specified as an input parameter, infinity is used.
- If no output parameter is specified, no result (or an error) is
returned.
|
The following command reference section includes all DECdts API
routines.
utc_abstime
Computes the absolute value of a relative binary timestamp.
Format
#include <utc.h>
int utc_abstime( result, *utc1)
- utc_t result ;
- const utc_t
*utc1;
Parameters
Input
utc1
Relative binary timestamp.
Output
result
Absolute value of the input relative binary timestamp.
Description
The Absolute Time routine computes the absolute value
of a relative binary timestamp. The input timestamp represents a
relative (delta) time.
Returns
0
|
Indicates that the routine executed successfully.
|
--1
|
Indicates an invalid time parameter or invalid results.
|
Example The following example scales a relative time, computes its
absolute value, and prints the result.
utc_t relutc, scaledutc;
char timstr[UTC_MAX_STR_LEN];
/*
* Make sure relative timestamp represents a positive interval...
*/
utc_abstime(&relutc, /* Out: Abs-value of rel time */
&relutc); /* In: Relative time to scale */
/*
* Scale it by a factor of 17...
*/
utc_multime(&scaledutc, /* Out: Scaled relative time */
&relutc, /* In: Relative time to scale */
17L); /* In: Scale factor */
utc_ascreltime(timstr, /* Out: ASCII relative time */
UTC_MAX_STR_LEN, /* In: Length of input string */
&scaledutc); /* In: Relative time to */
/* convert */
printf("%s\n",timstr);
/*
* Scale it by a factor of 17.65...
*/
utc_mulftime(&scaledutc, /* Out: Scaled relative time */
&relutc, /* In: Relative time to scale */
17.65); /* In: Scale factor */
utc_ascreltime(timstr, /* Out: ASCII relative time */
UTC_MAX_STR_LEN, /* In: Length of input string */
&scaledutc); /* In: Relative time to */
/* convert */
printf("%s\n",timstr);
|
utc_addtime
Computes the sum of two binary timestamps; the timestamps can be two
relative times or a relative time and an absolute time.
Format
#include <utc.h>
int utc_addtime( result, *utc1, *utc2)
- utc_t result ;
- const utc_t
*utc1;
- const utc_t *utc2;
Parameters
Input
utc1
Binary timestamp or relative binary timestamp.
utc2
Binary timestamp or relative binary timestamp.
Output
result
Resulting binary timestamp or relative binary timestamp, depending on
the operation performed:
- relative time + relative time = relative
time
- absolute time + relative time = absolute
time
- relative time + absolute time = absolute
time
- absolute time + absolute time is undefined. See
NOTES.
Description
The Add Time routine adds two binary timestamps,
producing a third binary timestamp whose inaccuracy is the sum of the
two input inaccuracies. One or both of the input timestamps typically
represent a relative (delta) time. The TDF in the first input timestamp
is copied to the output.
Notes Although no error is returned, do not use the
combination absolute time + absolute time. Returns
0
|
Indicates that the routine executed successfully.
|
--1
|
Indicates an invalid time parameter or invalid results.
|
Example The following example shows how to compute a timestamp that
represents a time at least 5 seconds in the future.
utc_t now, future, fivesec;
reltimespec_t tfivesec;
timespec_t tzero;
/*
* Construct a timestamp that represents 5 seconds...
*/
tfivesec.tv_sec = 5;
tfivesec.tv_nsec = 0;
tzero.tv_sec = 0;
tzero.tv_nsec = 0;
utc_mkbinreltime(&fivesec, /* Out: 5 secs in binary timestamp */
&tfivesec, /* In: 5 secs in timespec */
&tzero); /* In: 0 secs inaccuracy in timespec */
/*
* Get the maximum possible current time...
* (NULL input parameter is used to specify the current time.)
*/
utc_pointtime((utc_t *)0, /* Out: Earliest possible current time */
(utc_t *)0, /* Out: Midpoint of current time */
&now, /* Out: Latest possible current time */
(utc_t *)0);/* In: Use current time */
/*
* Add 5 seconds to get future timestamp...
*/
utc_addtime(&future, /* Out: Future binary timestamp */
&now, /* In: Latest possible time now */
&fivesec); /* In: 5 secs */
|
Related Functions
utc_subtime
|