見出し画像

日付と時刻の取り扱い

もう忘れている人が殆どでしょうが、その昔「2000年問題」というのがありました。直接的な原因は、日付のうち「年」を下2桁しか用意していないので、2000年になった途端に1900年と解釈されるシステムが多く存在していたことです(もうすぐ今度は昭和100年問題が予定されています)。

2000年問題

昭和100年問題

日付というのは、年は普通の数値ですが、月は1~12までしかありませんし、日にいたっては1~31ではあるものの、月によってもっとも大きな日が異なるという実に面倒な値です(うるう年というのもありますね)。これは時刻も似たようなもので、時は0~24(0と24は同じ時刻を指すんですけど)、分は0~59、そして秒は普通は0~59なのですが、極稀に60まで使うことがあります(うるう秒)。さらに秒より小さな時刻に関しては、今度は普通の10進数の小数を使います。

この複雑な規則を扱うのに、コンピュータのいろいろな処理系には統一的な日付、時刻の型というものは無くて、それぞれの処理系に独自の実装があります。悪いことにはひとつの処理系でも用途によって複数の型を使い分ける必要すらあります。

この為、いろいろなプログラムが特にデータとしてファイルなどに書き出す時には、いろいろな表現を使うことになります。年月日をそれぞれ整数とするか、特定の日を起点とした連続した日の数値を使うか、桁数を決めて数値を文字列として表現するか、区切り文字を入れた文字列表現とするかなど(区切り文字にもいろいろな種類があります)千差万別になるわけです。困ったことに年月日の順序も国によって異なります。時刻については、さすがに時分秒の順序は同じですが、時の表現が12時間制だったり24時間制だったり、また0時を使うのか否かという違いがあります。

それから日本には無いのですが、世界の国や地域の中にはサマータイムというものが導入されていることがあります(地方ごとにも異なったりする)。もともとの時間に対して特定の期間だけ時刻を早めたりするのです。内部処理としては世界時を使えばいいのでしょうけど、日付を取り出す時に現地時間を考えないと「日付が違う」というクレームが来ることになります。

最近のOSは。こういう差異を「ロケール」というシステムでカスタマイズ出来るようになっているのですが、これをきちんと使いこなすのも大変で、ロケールを考慮しないで組まれているプログラムも多いです。そもそもサマータイムなんて、年中どこかの国で規則を変えているので、linux の update なんか見ていると、この関係のファイルが良く更新されていることを発見します。

日本独特のものとしては和暦があります。年だけに見えますが、年号を切り替える日が決まっていて、切り替わる年に関しては、その日を境に元号を変えなければなりません。最近の例では平成31年は4月30日まで。令和元年は5月1日からです。

参考までに今の暦の仕組みで遡れるのは日本では明治6年までで、明治5年より前は、いわゆる旧暦というか月と日付の関係が異なります(うるう月とかもある)。またこの切替の際に1ヶ月弱の日付が飛んでいます(明治5年は12月2日までしかない)。

そういう訳で明治以降に関しては、よく西暦・和暦変換というコードを書いたものですが(おかげで元号の切替日を覚えました)、昔触った富士通オアシスのカレンダーは、明治5年より前のカレンダーを表示させると、ちゃんと太陽太陰暦のカレンダーが出てきて驚きました(どこまで遡れるのかまでは確認しませんでした)。世の中には酔狂なプログラマーがいるものです。

あとひどい目にあったのが秒以下の時刻です。ここの精度がミリ秒であったり、マイクロ秒であったり、はたまたナノ秒のこともあるのですが、どこまで意味があるかは動いているシステムで異なったりします。あまり細かい部分はそもそもアテにならないので、正確にテストをしていないこともあるようで、とあるライブラリではドキュメントに書いてある精度と、実装されている精度がズレていて、どうしてもおかしいとソースを確認して間違いを発見したこともありました。コミッターにメールしたら次のリリースで直りましたけど。

いやぁ、ツラツラと書いてしまいましたが、実に面倒なデータです。日付と時刻は、足したり引いたりする必要もありますし、大小判定も重要です。これを ntp とかで巻き戻された暁には、もう何が起こるかなんて考えたくもありません。いずれ個別にこんな苦労をしたなんて話を思い出しながら、続きの話も書こうかな。

(おまけ)
そういえば、こんなツイートを見かけたのですが1872(明治5)年12月28日生まれと入力するとエラーになるのだろうか。

明治5年12月は2日までしかなく給料カットで太陽暦導入 それまでは太陰暦と二十四節気・雑節

ヘッダ画像は、いらすとや さんより

https://www.irasutoya.com/2015/01/blog-post_256.html



この記事が気に入ったらサポートをしてみませんか?