Time t
1450825
213441003
2008-05-19T10:37:13Z
138.251.229.120
{{wrongtitle|time_t}}
The '''time_t''' datatype is a [[data type]] in the [[C (programming language)|ISO C]] library defined for storing [[system time]] values. Such values are returned from the standard '''time()''' library function. This type is a [[typedef]] defined in the standard [[time.h|<time.h>]] header.
[[ISO C]] defines '''time_t''' as an arithmetic type, but does not specify any particular [[data type|type]], [[range (mathematics)|range]], [[frequency|resolution]], or encoding for it. Also unspecified are the meanings of arithmetic operations applied to time values.
[[Unix]] and [[POSIX|POSIX-compliant systems]] implement the '''time_t''' type as a signed integer (typically 32 or 64 [[bits]] wide) which represents the number of seconds since the start of the [[Unix epoch]]: [[midnight]] [[UTC]] of [[January 1]] [[1970]] (not counting [[leap seconds]]). Some systems support negative time values, while others do not. 32 bit time_t is deprecated, due to the [[Year 2038 problem]].<ref>[http://pw1.netcom.com/~rogermw/Y2038.html The Year 2038 problem], Roger M. Wilcox. Retrieved on [[2008]]-[[May 19|05-19]].</ref>
In addition to the '''time()''' function, ISO C also specifies [[Time.h|other functions and types]] for converting '''time_t''' [[system time]] values into [[calendar date|calendar times]] and vice versa.
==Example==
The following C code retrieves the current time, formats it as a string, and writes it to the standard output.
<source lang="c">
#include <stdio.h>
#include <time.h>
int main(void)
{
time_t now;
struct tm *ts;
char buf[80];
// Get the current time
time(&now);
// Format and print the time, "ddd yyyy-mm-dd hh:mm:ss zzz"
ts = localtime(&now);
strftime(buf, sizeof(buf), "%a %Y-%m-%d %H:%M:%S %Z", ts);
printf("%s\n", buf);
return 0;
}
</source>
==time_t parties==
{{Refimprovesect|date=July 2007}}
Unix enthusiasts have a history of holding '''time_t parties''' to celebrate significant values of the Unix time number.<ref>{{cite web |url=http://slashdot.org/articles/05/03/17/169200.shtml?tid=130 |title=Slashdot {{!}} date +%s Turning 1111111111 |accessdate=2007-07-14 |format= |work= }}
</ref> These are directly analogous to the [[new year]] celebrations that occur at the change of year in many calendars. As the use of Unix time has spread, so has the practice of celebrating its milestones. Usually it is time values that are round numbers in [[decimal]] that are celebrated, following the Unix convention of viewing time_t values in decimal. Among some groups round [[Binary numeral system|binary]] numbers are also celebrated, such as +2<sup>30</sup> which occurred at 13:37:04 [[UTC]] on [[January 10]], [[2004]].
The events that these celebrate are typically described as "N seconds since the Unix epoch", but this is inaccurate. As discussed above, due to the handling of [[leap second]]s in Unix time, the number of seconds elapsed since the Unix epoch is slightly greater than the Unix time number, for times later than the epoch.
At 01:46:40 [[UTC]] on [[September 9]], [[2001]], the [[Unix billennium]] (Unix time number 1000000000) was celebrated.
At 01:58:31 [[UTC]] on [[March 18]], [[2005]], the Unix time number reached 1111111111.
At 23:31:30 [[UTC]] on [[February 13]], [[2009]], a celebration is expected as the Unix time number reaches 1234567890 seconds. This day happens to fall on [[Friday the 13th]] on the [[Gregorian calendar]]. The UNIX time number [[Hexadecimal numeral system|0x50000000]] (1342177280 seconds) will also happen on a [[Friday the 13th]], at 12:01:20 [[UTC]] on [[July 13]], [[2012]].
At 03:33:20 [[UTC]] on [[May 18]] [[2033]], the second billennium will be celebrated (Unix time number 2000000000).
==See also==
* [[C standard library]]
* [[Real-time clock]]
* [[System time]]
* [[Unix time]]
* [[Year 2038 problem]]
==References==
<references />
[[Category:C standard library]]
[[Category:Time]]
[[ko:Time t]]
[[pt:Time t]]