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

FreeBSD Manual Pages


home | help
CTIME(3)		 BSD Library Functions Manual		      CTIME(3)

     asctime, asctime_r, ctime,	ctime_r, ctime_rz, difftime, gmtime, gmtime_r,
     localtime,	localtime_r, localtime_rz, mktime, mktime_z, tzalloc,
     tzgetname,	tzfree,	-- convert date	and time to ASCII

     Standard C	Library	(libc, -lc)

     #include <time.h>

     extern char *tzname[2];

     char *
     asctime(const struct tm *tm);

     char *
     asctime_r(const struct tm restrict	tm, char * restrict buf);

     char *
     ctime(const time_t	*clock);

     char *
     ctime_r(const time_t *clock, char *buf);

     char *
     ctime_rz(const timezone_t tz, const time_t	*clock,	char *buf);

     difftime(time_t time1, time_t time0);

     struct tm *
     gmtime(const time_t *clock);

     struct tm *
     gmtime_r(const time_t * restrict clock, struct tm * restrict result);

     struct tm *
     localtime(const time_t *clock);

     struct tm *
     localtime_r(const time_t *	restrict clock,	struct tm * restrict result);

     struct tm *
     localtime_rz(const	timezone_t tz, const time_t * restrict clock,
	 struct	tm * restrict result);

     mktime(struct tm *tm);

     mktime_z(const timezone_t tz, struct tm *tm);

     tzalloc(const char	*zone);

     tzfree(const timezone_t tz);

     const char	*
     tzgetname(const timezone_t	tz, int	isdst);

     The asctime family	of functions provide various standard library routines
     to	operate	with time and conversions related to time.

	   The asctime() function converts a time value	contained in the tm
	   structure to	a string with the following general format:

		       Thu Nov 24 18:22:48 1986\n\0

	   The tm structure is described in tm(3).

     asctime_r(tm, buf)
	   The asctime_r() has the same	behavior as asctime(), but the result
	   is stored to	buf, which should have a size of at least 26 bytes.

	   The ctime() function	converts a time_t, pointed to by clock,	repre-
	   senting the time in seconds since 00:00:00 UTC, 1970-01-01, and re-
	   turns a pointer to a	string with the	format described above.	 Years
	   requiring fewer than	four characters	are padded with	leading	ze-
	   roes.  For years longer than	four characters, the string is of the

		       Thu Nov 24 18:22:48     81986\n\0

	   with	five spaces before the year.  These unusual formats are	de-
	   signed to make it less likely that older software that expects ex-
	   actly 26 bytes of output will mistakenly output misleading values
	   for out-of-range years.

     ctime_r(clock, buf)
	   The ctime_r() is similar to ctime(),	except it places the result of
	   the conversion on the buf argument, which should be 26 or more
	   bytes long, instead of using	a global static	buffer.

     ctime_rz(tz, clock, buf)
	   The ctime_rz() function is similar to ctime_r(), but	it also	takes
	   a const timezone_t argument,	as returned by a previous call to

     difftime(time1, time2)
	   The difftime() function returns the difference between two calendar
	   times, (time1 - time0), expressed in	seconds.

	   The gmtime()	function converts to Coordinated Universal Time	(UTC)
	   and returns a pointer to the	tm structure described in tm(3).

     gmtime_r(clock, result)
	   The gmtime_r() provides the same functionality as gmtime(), differ-
	   ing in that the caller must supply a	buffer area result to which
	   the result is stored.

	   Also	localtime() is comparable to gmtime().	However, localtime()
	   corrects for	the time zone and any time zone	adjustments (such as
	   Daylight Saving Time	in the U.S.A.).	 After filling in the tm
	   structure, the function sets	the tm_isdst'th	element	of tzname to a
	   pointer to an ASCII string that is the time zone abbreviation to be
	   used	with localtime()'s return value.

     localtime_r(clock,	result)
	   As gmtime_r(), the localtime_r() takes an additional	buffer result
	   as a	parameter and stores the result	to it.	Note however that
	   localtime_r() does not imply	initialization of the local time con-
	   version information;	the application	may need to do so by calling

     localtime_rz(tz, clock, result)
	   The localtime_rz() function is similar to localtime_r(), but	it
	   also	takes a	const timezone_t argument, returned by a previous call
	   to tzalloc().

	   The mktime()	function converts the broken-down time,	expressed as
	   local time in the tm(3) structure, into a calendar time value with
	   the same encoding as	that of	the values returned by the time(3)
	   function.  The following remarks should be taken into account.

	   +o   The original values of the tm_wday and tm_yday components of
	       the structure are ignored, and the original values of the other
	       components are not restricted to	their normal ranges.  (A posi-
	       tive or zero value for tm_isdst causes mktime() to presume ini-
	       tially that summer time (for example, Daylight Saving Time in
	       the U.S.A.) respectively, is or is not in effect	for the	speci-
	       fied time.

	   +o   A negative value	for tm_isdst causes the	mktime() function to
	       attempt to divine whether summer	time is	in effect for the
	       specified time; in this case it does not	use a consistent rule
	       and may give a different	answer when later presented with the
	       same argument.

	   +o   On successful completion, the values of the tm_wday and tm_yday
	       components of the structure are set appropriately, and the
	       other components	are set	to represent the specified calendar
	       time, but with their values forced to their normal ranges; the
	       final value of tm_mday is not set until tm_mon and tm_year are

	   The function	returns	the specified calendar time; if	the calendar
	   time	cannot be represented, it returns (time_t)-1.  This can	happen
	   either because the resulting	conversion would not fit in a time_t
	   variable, or	because	the time specified happens to be in the	day-
	   light savings gap and tm_isdst was set to -1.  Other	mktime() im-
	   plementations do not	return an error	in the second case and return
	   the appropriate time	offset after the daylight savings gap.	There
	   is code to mimick this behavior, but	it is not enabled by default.

     mktime_z(tz, tm)
	   The mktime_z() function is similar to mktime() but it also takes a
	   const timezone_t argument, returned by a previous call to

	   The tzalloc() function takes	as an argument a timezone name and re-
	   turns a timezone_t object suitable to be used in the	ctime_rz(),
	   localtime_rz(), and mktime_z() functions.

	   Note	that instead of	setting	the environment	variable TZ, and glob-
	   ally	changing the behavior of the calling program, one can use mul-
	   tiple timezones at the same time by using separate timezone_t ob-
	   jects allocated by tzalloc()	and calling the	"z" variants of	the

	   The tzfree()	function deallocates tz, which was previously allo-
	   cated by tzalloc().

	   Finally, tzgetname()	returns	the name for the given tz.  If isdst
	   is 0, the call is equivalent	to tzname[0].  If isdst	is set to 1
	   the call is equivalent to tzname[1].

     +o	 On success the	asctime() and ctime() functions	return a pointer to a
	 static	character buffer, and the asctime_r(), ctime_r(), and
	 ctime_rz() function return a pointer to the user-supplied buffer.  On
	 failure they all return NULL and no errors are	defined	for them.

     +o	 On success the	gmtime(), and localtime() functions return a pointer
	 to a statically allocated struct tm whereas the gmtime_r(),
	 localtime_r(),	and localtime_rz(), functions return a pointer to the
	 user-supplied struct tm.  On failure they all return NULL and the
	 global	variable errno is set to indicate the error.

     +o	 The mktime() and mktime_z() function returns the specified time since
	 the Epoch as a	time_t type value.  If the time	cannot be represented,
	 then mktime() and mktime_z() return (time_t)-1	setting	the global
	 variable errno	to indicate the	error.

     +o	 The tzalloc() function	returns	a pointer to a timezone_t object or
	 NULL on failure, setting errno	to indicate the	error.

     +o	 tzgetzone() function returns string containing	the name of the	time-
	 zone given in tz.

     /etc/localtime		     local time	zone file
     /usr/share/zoneinfo	     time zone information directory
     /usr/share/zoneinfo/posixrules  used with POSIX-style TZ's
     /usr/share/zoneinfo/GMT	     for UTC leap seconds

     If	/usr/share/zoneinfo/GMT	is absent, UTC leap seconds are	loaded from

     The described functions may fail with

     [EINVAL]		The result cannot be represented because a parameter
			is incorrect, or the conversion	failed because no such
			time exists (for example a time	in the DST gap).

     [EOVERFLOW]	The result cannot be represented because the time re-
			quested	is out of bounds and the time calculation re-
			sulted in overflow.

     All functions that	return values, except their "z"	variants, can also re-
     turn the same errors as open(2) and malloc(3).

     getenv(3),	strftime(3), time(3), tm(3), tzset(3), tzfile(5)

     The ctime(), difftime(), asctime(), localtime(), gmtime() and mktime()
     functions conform to ANSI X3.159-1989 ("ANSI C89").  Rest of the func-
     tions conform to IEEE Std 1003.1-2008 ("POSIX.1").

     The functions that	do not take an explicit	timezone_t argument return
     values point to static data; the data is overwritten by each call.	 For
     the above functions the tm_zone field of a	returned struct	tm points to a
     static array of characters, which will also be overwritten	at the next
     call (and by calls	to tzset(3)).  The functions that do take an explicit
     timezone_t	argument and set the fields of a supplied struct tm should not
     call tzfree() since the tm_zone field of the struct tm points to data al-
     located by	tzalloc().

     The asctime() and ctime() functions behave	strangely for years before
     1000 or after 9999.  The 1989 and 1999 editions of	the C Standard say
     that years	from -99 through 999 are converted without extra spaces, but
     this conflicts with longstanding tradition	and with this implementation.
     Traditional implementations of these two functions	are restricted to
     years in the range	1900 through 2099.  To avoid this portability mess,
     new programs should use strftime()	instead.

     Avoid using out-of-range values with mktime() when	setting	up lunch with
     promptness	sticklers in Riyadh.

BSD			       November	2, 2011				   BSD


Want to link to this manual page? Use this URL:

home | help