Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (NetBSD-6.1.5)
Apropos / Subsearch:
optional field

TIME2POSIX(3)              Library Functions Manual              TIME2POSIX(3)

     time2posix, time2posix_z, posix2time, posix2time_z, -- convert seconds
     since the Epoch

     Standard C Library (libc, -lc)

     #include <&lt;time.h>&gt;

     time2posix(time_t t);

     time2posix_z(const timezone_t tz, time_t t);

     posix2time(time_t t);

     posix2time_z(const timezone_t tz, time_t t);

     IEEE Std 1003.1 (``POSIX.1'') legislates that a time_t value of 536457599
     shall correspond to
           Wed Dec 31 23:59:59 UTC 1986.
     This effectively implies that POSIX time_t's cannot include leap seconds
     and, therefore, that the system time must be adjusted as each leap

     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(3), localtime(3), localtime_r(3),
     localtime_rz(3), mktime(3), mktime_z(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

     The time2posix(), time2posix_z(), posix2time(), and posix2time_z()
     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() and time2posix_z() are single-valued.  That is, every local
     time_t corresponds to a single POSIX time_t.  posix2time() and
     posix2time() are 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 ``z'' variants of the two functions behave exactly like their
     counterparts, but they operate in the given tz argument which was
     previously allocated using tzalloc(3) and are re-entrant.

     The following table summarizes the relationship between a time_t and its
     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.

     difftime(3), localtime(3), localtime_r(3), localtime_rz(3), mktime(3),
     mktime_z(3), time(3), tzalloc(3)

NetBSD 6.1.5                   December 4, 2010                   NetBSD 6.1.5