2009年11月2日月曜日

ACCESSとJavaの日付の扱い

ACCESSでは"09/10/27"という日付の文字列を 以下のコードでフォーマットすると、"2009/10/27"という結果になるが、

Dim strFormattedDate As String
strFormattedDate = $Format("09/10/27", "yyyy/mm/dd")

Javaで同様の処理を行うと、strFormattedDate の値が"0009/10/27" となってしまう。

SimpleDateFormat dateFormat =
  (SimpleDateFormat)DateFormat.getDateInstance();
dateFormat.applyPattern("yyyy/MM/dd");
Date date = DateFormat.getDateInstance().parse("09/10/27");
   String formattedDate = dataFormat.format(date);

09年という情報が入ってきた時に
ACCESSは2009年
Javaは           9年

と判定するのが今回の違いの原因なのだが、人間的な感覚ではACCESSが正しいが、システム仕様としてはJavaの方が正しくなる。

ちなみにACCESSの方は基準が1930年になっているようで、
ACCESSのコードで年数を増やしていくと、"30/01/01"から "1930/01/01"となってしまう。
さすがにそこまで同じシステムを使うとは思えないが、こういった仕様の点からも脱ACCESSは進めていかないといけない。

仕様としては
・入力欄を YYYY/MM/DDの4ケタにする
・ACCESSと同じように30年辺りで区切るようにする
のどちらかになるが、どちらがうちのシステムとしてあるべきか検討しないといけない。

0 件のコメント: