- PR -

DBで日時を扱うような場合、エポックタイムをlong型でDBにそのまま

1
投稿者投稿内容
うる
常連さん
会議室デビュー日: 2005/10/16
投稿数: 41
投稿日時: 2006-07-14 17:56
みなさんこんにちは。

DBで日時を扱うような場合、エポックタイムをlong型でDBにそのまま、
書き込むというのは邪道なのでしょうか?
日時の前後比較や、計算等は、long型の数値の方が扱いやすい気がするのですが。

あともう一つ、long型に大きな数値を代入する場合に、
コンパイルエラーが出るのですが、コーディング方法はどのようにすれば良いのでしょうか?
以下の書き方で、 整数122219899900が大き過ぎます とエラーが出ます。
long a = 122219899900;

以上、宜しくお願い致します。
Java僧
ぬし
会議室デビュー日: 2003/11/06
投稿数: 261
投稿日時: 2006-07-14 18:19
java.util.Dateやjava.util.CalendarやRDBMSの日時型の核心はlong型なので、
long型で書き込んでも邪道ではないと思いますが、
わかりやすさという観点では日付型を使ったほうがよいと思います。

前後比較や計算は強力なメソッドがあると思うのですが、不満ですか?
Calendar#after(Object when) や Calendar#before(Object when) 、
Calendar#add(int field, int amount)

longのリテラル表現はこちら↓
http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.10.1
うる
常連さん
会議室デビュー日: 2005/10/16
投稿数: 41
投稿日時: 2006-07-14 19:54
早速の回答ありがとうございます。

以前に日付データをlong型でDB書き込んではいけない的な、
投稿があったので少し安心しました。
未記入
ぬし
会議室デビュー日: 2004/09/17
投稿数: 667
投稿日時: 2006-07-15 12:53
で、その日付フィールドに 1152889200000 を格納しないといけない場面で 20060715 を格納する馬鹿がいてトラブルになったりするわけですね。「格納する値はエポックタイムである」という情報はコンピュータシステムから少し離れたところにある(たとえば仕様書に記載するはず)ので厳密性という点で弱いと思います。

また、エポックタイムというのも厳密でないように思います。エポックタイムを基点としても Unix 時間は経過秒数ですし、Java は経過ミリ秒数です。こういったことを考えると整数フィールドに日時情報を全員が厳密に格納するのが、どれだけ困難かわかるでしょう。

また、JDBC でアクセスする場合 getDate() ではなく getLong() を使うことになるのも可読性の低下に繋がると考えます。
1

スキルアップ/キャリアアップ(JOB@IT)