Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
TIME2POSIX(3)		    Library Functions Manual		 TIME2POSIX(3)

NAME
       time2posix, posix2time -- convert seconds since the Epoch

LIBRARY
       Standard	C Library (libc, -lc)

SYNOPSIS
       #include	<time.h>

       time_t
       time2posix(time_t t);

       time_t
       posix2time(time_t t);

DESCRIPTION
       IEEE  Std  1003.1-1988  ("POSIX.1")  says that values cannot count 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 in-
       crease 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.

       For  many  C programs this is not a problem as the C standard says that
       time_t is (mostly) opaque -- time_t values should 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 comput-
       ing a time_t value directly from	a given	Universal date and  time,  and
       the  same  relationship	is assumed by some applications.  Any programs
       creating/dissecting time_t values using such a relationship will	 typi-
       cally not handle	intervals over leap seconds correctly.

       The  time2posix()  and  posix2time() functions address this 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 when communicating
       with POSIX-compliant systems.

       The time2posix()	function converts a time_t value to its	POSIX counter-
       part, if	one exists.  The posix2time() function does the	reverse	but 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 indicate problems with the POSIX representation.

       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.   In  this	table,
       X=time2posix(T),	 Y=posix2time(X),  A=741484816,	 and B=A-17 because 17
       positive	leap seconds preceded this leap	second.

       DATE	     TIME	 T	X      Y
       1993-06-30    23:59:59	 A	B      A
       1993-06-30    23:59:60	 A+1	B+1    A+1 or A+2
       1993-07-01    00:00:00	 A+2	B+1    A+1 or A+2
       1993-07-01    00:00:01	 A+3	B+2    A+3

       A  leap	second	deletion  would	  look	 like	the   following,   and
       posix2time(B+1) would return either A or	A+1.

       DATE	    TIME       T     X	   Y
       ????-06-30   23:59:58   A     B	   A
       ????-07-01   00:00:00   A+1   B+2   A+1
       ????-07-01   00:00:01   A+2   B+3   A+2

       If  leap-second	support	 is not	enabled, local time_t and POSIX	time_t
       values are equivalent, and both time2posix() and	posix2time()  degener-
       ate to the identity function.

RETURN VALUES
       If  successful,	these functions	return the resulting timestamp without
       modifying errno.	 Otherwise, they set errno and return ((time_t)	-1).

ERRORS
       These functions fail if:

       [EOVERFLOW]	  The resulting	value cannot be	represented.  This can
			  happen for posix2time() if its argument is close  to
			  the maximum time_t value.  In	environments where the
			  TZ  environment variable names a TZif	file, overflow
			  can happen for either	function for an	argument  suf-
			  ficiently  close  to	an extreme time_t value	if the
			  TZif file specifies unrealistic leap second  correc-
			  tions.

SEE ALSO
       difftime(3), localtime(3), mktime(3), time(3)

FreeBSD	ports 15.quarterly	 March 8, 2026			 TIME2POSIX(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=time2posix&sektion=3&manpath=FreeBSD+15.1-RELEASE+and+Ports.quarterly>

home | help