aboutsummaryrefslogtreecommitdiff
path: root/time2posix.3.txt
diff options
context:
space:
mode:
Diffstat (limited to 'time2posix.3.txt')
-rw-r--r--time2posix.3.txt76
1 files changed, 76 insertions, 0 deletions
diff --git a/time2posix.3.txt b/time2posix.3.txt
new file mode 100644
index 000000000000..d9db97010ebe
--- /dev/null
+++ b/time2posix.3.txt
@@ -0,0 +1,76 @@
+TIME2POSIX(3) Library Functions Manual TIME2POSIX(3)
+
+NAME
+ time2posix, posix2time - convert seconds since the Epoch
+
+SYNOPSIS
+ #include <time.h>
+
+ time_t time2posix(time_t t);
+
+ time_t posix2time(time_t t);
+
+ cc ... -ltz
+
+DESCRIPTION
+ IEEE Standard 1003.1 (POSIX) requires the time_t value 536457599 to
+ stand for 1986-12-31 23:59:59 UTC. This effectively implies that POSIX
+ time_t values cannot include leap seconds and, therefore, that the
+ system time must be adjusted as each leap occurs.
+
+ If the time package is configured with leap-second support enabled,
+ however, no such adjustment is needed and time_t values continue to
+ increase over leap events (as a true "seconds since..." value). This
+ means that these values will differ from those required by POSIX by the
+ net number of leap seconds inserted since the Epoch.
+
+ Typically this is not a problem as the type time_t is intended to be
+ (mostly) opaque - time_t values should only be obtained-from and
+ passed-to functions such as time(2), localtime(3), mktime(3), and
+ difftime(3). However, POSIX gives an arithmetic expression for
+ directly computing a time_t value from a given date/time, and the same
+ relationship is assumed by some (usually older) applications. Any
+ programs creating/dissecting time_t's using such a relationship will
+ typically not handle intervals over leap seconds correctly.
+
+ The time2posix and posix2time functions are provided to address this
+ time_t mismatch by converting between local time_t values and their
+ POSIX equivalents. This is done by accounting for the number of time-
+ base changes that would have taken place on a POSIX system as leap
+ seconds were inserted or deleted. These converted values can then be
+ used in lieu of correcting the older applications, or when
+ communicating with POSIX-compliant systems.
+
+ Time2posix is single-valued. That is, every local time_t corresponds
+ to a single POSIX time_t. Posix2time is less well-behaved: for a
+ positive leap second hit the result is not unique, and for a negative
+ leap second hit the corresponding POSIX time_t doesn't exist so an
+ adjacent value is returned. Both of these are good indicators of the
+ inferiority of the POSIX representation.
+
+ The following table summarizes the relationship between a time T and
+ it's conversion to, and back from, the POSIX representation over the
+ leap second inserted at the end of June, 1993.
+ DATE TIME T X=time2posix(T) posix2time(X)
+ 93/06/30 23:59:59 A+0 B+0 A+0
+ 93/06/30 23:59:60 A+1 B+1 A+1 or A+2
+ 93/07/01 00:00:00 A+2 B+1 A+1 or A+2
+ 93/07/01 00:00:01 A+3 B+2 A+3
+
+ A leap second deletion would look like...
+
+ DATE TIME T X=time2posix(T) posix2time(X)
+ ??/06/30 23:59:58 A+0 B+0 A+0
+ ??/07/01 00:00:00 A+1 B+2 A+1
+ ??/07/01 00:00:01 A+2 B+3 A+2
+
+ [Note: posix2time(B+1) => A+0 or A+1]
+
+ If leap-second support is not enabled, local time_t's and POSIX
+ time_t's are equivalent, and both time2posix and posix2time degenerate
+ to the identity function.
+
+SEE ALSO
+ difftime(3), localtime(3), mktime(3), time(2)
+
+ TIME2POSIX(3)