時間
Time
アプリケーションでは、多くの場合、時間を扱う必要がある。このため、たいていのプログラミング言語には標準で時間ライブラリが用意されている。
日本語では「時間」と「時刻」という言葉がが混同して取り扱われているので要注意。
時間
「時」の概念を示す名詞
時の抽象的間隔を示す名詞
1時間、2時間というように、具体的間隔を示す助数詞
時刻
時の1点を示す名詞
問題
グローバル時刻とローカル時刻、時差、タイムゾーンの取り扱い
夏時間(サマータイム, summer time, DST (daylight saving time))の取り扱い
時刻の原点(epoch)
取り扱える時間の範囲
時間の精度
秒未満の時間の取り扱い
カレンダー(暦)の取り扱い
歴史的な暦の取り扱い
各種カレンダー(暦)の取り扱い
カレンダーの基点の取り扱い
うるう年の取り扱い
週の取り扱い
うるう秒の取り扱い
相対論的な時間の取り扱い
時間同期の問題
各種時刻系の違い
https://ja.wikipedia.org/wiki/時刻系
UTC
ローカル時刻
GPS時刻
Loran-C時刻
船舶のために使われていたが、GPSに置き換わったため廃止された。
日本最後のロランC局が閉鎖(2015年02月01日) https://blog.canpan.info/kaiho-shinbun/archive/172
TAI
歴史的な暦の取り扱い
グレゴリオ暦は制定された以前には存在していないため、本来は適用できない。
歴史的な記録物は、当然その時代のその地方の暦法で記録されていて、後の歴史でできた暦とは無関係になっている。
歴史的な記録物を取り扱う場合には注意が必要となる。
グレコリオ暦をあえて制定日以前まで適用するものを先発グレゴリオ暦 (proleptic Gregorian calendar) と呼ぶ。
先発グレゴリオ暦 https://ja.wikipedia.org/wiki/先発グレゴリオ暦
遡及グレゴリオ暦、予測的グレゴリオ暦、予期的グレゴリオ暦などとも訳される
シリウス暦
古代ギリシア暦
地方により異なる暦が使われていた
ローマ暦
ユリウス暦
BC 46 年から始まる。
ユリウス暦はうるう年を正しく扱わなかったためにズレがある。
歴史的な取り扱いをする時には注意が必要。
日本の暦
https://ja.wikipedia.org/wiki/日本の暦
https://ja.wikipedia.org/wiki/和暦
https://ja.wikipedia.org/wiki/元嘉暦
https://ja.wikipedia.org/wiki/儀鳳暦
https://ja.wikipedia.org/wiki/大衍暦
https://ja.wikipedia.org/wiki/五紀暦
https://ja.wikipedia.org/wiki/宣明暦
https://ja.wikipedia.org/wiki/貞享暦
https://ja.wikipedia.org/wiki/宝暦暦
https://ja.wikipedia.org/wiki/寛政暦
カレンダー(暦)の取り扱い
現在、一般的に使われているのはグレゴリオ暦(太陽暦の一つ)
日本ではグレゴリオ暦に加えて和暦(現在はほぼ天皇の在籍年数と同義になったが、必ずしもそうではない)がよく使われてる。
和暦とは令和2年とかのこと。
カレンダーの基点の取り扱い
ヨーロッパでは、ユリウス暦1582年10月5日=グレゴリオ暦1582年10月15日として切り替えられた。
このため、本当に「正しい」暦を作ると、1582年10月6日~1582年10月14日が存在しなくなる。
実用上ではグレゴリオ暦のまま過去に遡る方式がよく取られる。
グレゴリオ暦への切り替えは国ごとに異なる。
https://ja.wikipedia.org/wiki/グレゴリオ暦#各国のグレゴリオ暦導入年月日
日本では、天保暦(太陰暦の一つ)からグレゴリオ暦への切り替えで、明治5年12月3日を明治6年(1873年)1月1日にした。
https://ja.wikipedia.org/wiki/グレゴリオ暦#日本におけるグレゴリオ暦導入
間違いなく一定間隔で進むのは原子時計の時刻で、これを原子時(AT, Atomic Time)と呼ぶ。
(ただし、これも相対性理論により、重力(加速度)と速度によって変動する)
世界中の原子時計の時刻を加重平均したものを国際原子時(TAI)と呼ぶ。
協定世界時(UTC)は、国際原子時から求められるが、地球の自転速度にはブレがあり、国際原子時のままでは正午に太陽が正中しなくなってしまう。
このブレを補正するために、うるう秒が挿入・削除される。
(削除方法は定義されているが、今まで挿入しか発生していない。)
Unix (POSIX) にて C/C++ の time 関数で取得されるのは、1970年1月1日GMT(UTC)からの秒数。
ただし、これはうるう秒を含むかどうかは規定されていない。
一般的なシステムではうるう秒を含まない設定がデフォルトになっている。(うるう秒を計算すると複雑化するため。)
うるう秒を含むシステムと含まないシステムとで経過秒数が十数秒の時間差が発生することに注意が必要。