現状で
などの条件を満たしているのがたまたま UNIX TIME だっただけ、という気がします。
もちろん最初に出ている「普及している」は最重要項目ですが、他でダメという理由はありません。
実際 RDBMS 等で使用されている timestamp 型は実装にもよりますがミリ秒までの精度をもち、過去・未来において UNIX TIME より広い範囲を扱えるものもありますが、
処理効率や、メモリ使用量の点で通常の利用に必要かどうかは疑問です。
また、2038年問題自体は UNIX TIME 自体の問題では無いと考えています。
これを扱うための time_t 型の代表的な実装がたまたま 32bit だっただけで 64bit の実装があれば、2038年問題は発生しません。
(問題を未来に先送りするだけですが)
本質的な問題は残りますが、現実的に取りうる対処としてはベターだと思います。
メリットは他でも使っているから。
時間を扱うシステムはUNIX系のサーバーが多い。少なくとも昔はそうだった。定義も明確で間違いようが無い。
サーバー同士で共通の時間をやりとりする必要がある場合に共通の仕組みを使った方が便利なので皆UNIX TIMEを用いている。
少なくとも、今はちゃんと使えているのでここ数年のレンジで変更する必然性もなくそのまま使っている。
というのが現実だと思いますね。
日付型や文字列型はそれこそ千差万別に種類があるので元となる形式を決めないと始まらないし。
なるほど、広く使われている上に定義も明確であることが大きな理由なのですね。
日付型や文字型というだけでは、比較対象にならないですよね…もう少しいい例を考えるべきでした。
>どういった視点からの回答でも構いません。
では遠慮なく。
2038年以降は、使えなくなるので、
仕事が確実に確保できます。
http://blog.hooktail.org/?eid=410363
(笑)
UNIXTIMEを使うことで、将来の仕事を増やすわけですね
UNIX TIMEと2038年問題は、直接的に結びつくものではありません。
UNIX TIMEを表現するtime_t型が32ビット型で実装されているケースが多く、そのために2038年問題が起きるわけですが、1999年に策定されたC99では64ビットの long long 型が加わり、time_t型をunsigned long long(64ビット)で定義しているCコンパイラも登場しています。こうした処理系を使えば、2038年問題は回避できます。
また、time_t型を引数とするctime関数は、「うるう秒」を補正してくれます。1972年以降、23回のうるう秒が発生していますから、長期にわたる時間計算においてはUNIX TIMEのメリットはあると思います。
うるう秒の存在は完全に失念していました、ありがとうございます。確かに他の日付を表す形式では、少々扱いに困りますよね(変換が複数回必要になったり、そもそも秒数までカウントしていなかったり)。
64ビットまで対応すれば私が挙げた問題も関係なくなるわけで、デメリットは使い方次第になりそうですね
永続的なデータに Unix timeを使うのがいいかはいまとなってはやや疑問が残りますが、j1960さんも書いているような冗長性の少なさはまだ魅力だと思います。
次は JavaTimeあたりでどうでしょう:
http://java.sun.com/j2se/1.4.2/docs/api/java/sql/Time.html#setTi...(long)
計算の手間は確かに少ないですよね。Java初級者の私もUNIX TIME関連の関数は少しづつ覚えながら活用しています。
JavaTimeについては、次に学習するべき知識、という意味でよろしかったですか?
現状で
などの条件を満たしているのがたまたま UNIX TIME だっただけ、という気がします。
もちろん最初に出ている「普及している」は最重要項目ですが、他でダメという理由はありません。
実際 RDBMS 等で使用されている timestamp 型は実装にもよりますがミリ秒までの精度をもち、過去・未来において UNIX TIME より広い範囲を扱えるものもありますが、
処理効率や、メモリ使用量の点で通常の利用に必要かどうかは疑問です。
また、2038年問題自体は UNIX TIME 自体の問題では無いと考えています。
これを扱うための time_t 型の代表的な実装がたまたま 32bit だっただけで 64bit の実装があれば、2038年問題は発生しません。
(問題を未来に先送りするだけですが)
本質的な問題は残りますが、現実的に取りうる対処としてはベターだと思います。
ちょっと調べてみましたが、MySQLでは以下の通りなんですね。今まであまり考えずにTIMESTAMP型を使っていたので勉強になりました。
DATETIME型 1000-01-01 00:00:00~9999-12-31 23:59:59
TIMESTAMP型 1970-01-01 00:00:00~2037年の一定の時点
ちょっと調べてみましたが、MySQLでは以下の通りなんですね。今まであまり考えずにTIMESTAMP型を使っていたので勉強になりました。
DATETIME型 1000-01-01 00:00:00~9999-12-31 23:59:59
TIMESTAMP型 1970-01-01 00:00:00~2037年の一定の時点
引用元:http://powerdee.com/it/mysql/dataTypes.html