「Time t」の版間の差分
編集の要約なし |
|||
10行目: | 10行目: | ||
以下の[[C言語]]のコードは現在時刻を取得し、文字列に整形し、標準出力へ出力する。 |
以下の[[C言語]]のコードは現在時刻を取得し、文字列に整形し、標準出力へ出力する。 |
||
< |
<syntaxhighlight lang="c"> |
||
#include <stdio.h> |
#include <stdio.h> |
||
#include <time.h> |
#include <time.h> |
||
36行目: | 36行目: | ||
return 0; |
return 0; |
||
} |
} |
||
</syntaxhighlight> |
|||
</source> |
|||
== time_tパーティ == |
== time_tパーティ == |
2020年7月5日 (日) 22:59時点における版
time_t
型は、システム時刻を表現あるいは保存するために標準Cライブラリが定義しているデータ型である。この値は標準のtime()
ライブラリ関数によって得られる。このデータ型は、標準の <time.h> ヘッダファイルでtypedefによって定義されている。ISO Cでは、time_t
を数値型と定義しているが、データ型・値の範囲・周期や、エンコーディング方法は定義していない。また、時刻の値に対する算術演算の動作は定義していない。
UNIXとPOSIX互換システムでは、UNIX時間(協定世界時 (UTC) 1970年1月1日0時00分00秒からの秒数)を表す符号付の整数(通常は32または64ビット)でtime_t
型を実装している(閏秒は数えない)。いくつかのシステムでは、負の時刻値をサポートするが、サポートしないシステムもある。2038年問題のために、32ビットのtime_t
は非難されている[1]。
そのため、最近のシステムには、time_t
を64ビットの整数型として定義しているものが多いが、古いシステムではそうでないものもあるので注意が必要である。
ISO Cでは、time()
関数だけでなく、システム時刻time_t
の値をカレンダー時刻に変換する関数や、逆の変換を行なう関数などを定義している。
利用例
以下のC言語のコードは現在時刻を取得し、文字列に整形し、標準出力へ出力する。
#include <stdio.h>
#include <time.h>
/*
* The result should look something like
* Fri 2008-08-22 15:21:59 WAST
*/
int main(void)
{
time_t now;
struct tm *ts;
char buf[80];
// Get the current time
now = time(NULL);
// 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);
printf("%lld\n", (long long)now);
return 0;
}
time_tパーティ
UNIXファンは、UNIX時間の意味ありげな値を祝賀するためにtime_tパーティを行なってきた歴史がある。これは、多くの暦で年が変わるときに行われる新年パーティと良く似ている。UNIX時間の使用が広がったことで、マイルストーンを祝うことが習慣となった。通常は端数のない10進数の時刻の値が、time_t の値を10進数で眺めるUNIXのコンベンションで祝賀される。一部のグループは、2004年1月10日の13:37:04 UTCに起こった+230のような端数のない2進数も祝賀している。
これらの祝賀イベントは、通常は「UNIX epochからN秒」と呼ばれるが、これは不正確である。上で述べたとおり、UNIX時刻の閏秒の扱いのため、UNIX epochからの秒数はUNIX時刻の数よりもわずかに大きい。
2001年9月9日 01:46:40 UTC、UNIX billennium(UNIX時刻が1000000000)の祝賀が行なわれた。
2005年3月18日 01:58:31 UTC、UNIX時刻が1111111111に到達した。
2009年2月13日 23:31:30 UTC、UNIX時刻が1234567890に到達する祝賀が行なわれる見込みである。
2033年5月18日 03:33:20 UTC、2回目のUNIX billennium(UNIX時刻が2000000000)の祝賀が行なわれる予定。
脚注
- ^ The Year 2038 problem, Roger M. Wilcox. Retrieved on 2008年5月19日.