C#とAccessにて、日付型(DateTime)のデフォルト値に差があることを忘れたりするので、メモ。
起こること
C#にて、DateTime型のnull扱い(=初期値)をどうするか悩みましたが、以下のようなコードで対応することにしました。
参考:今日の井原@はてな - DateTimeにnullを代入しようとすると怒られる件
new DateTime(0);
このままデータを保存すると、Accessには「00:00:00」と表示され、問題なく登録されます。
しかし、このデータをAccessから読込み、デフォルト値(上記のDateTime(0))と比較すると、値が一致しません。
理由
Accessの日付型の仕様を見ると、以下の様な記載がありました。
日付値 0 は 1899 年 12 月 30 日を表します。
Microsoft KB210276 - Microsoft Access で日付/時刻型の値の格納、計算、および比較を行う方法
一方、.NETのDateTime構造体は以下の通りです。
DateTime 値型は、A.D. (西暦紀元) 0001 年 1 月 1 日の深夜 12:00:00 から、A.D. (西暦紀元) 9999 年 12 月 31 日の午後 11:59:59 までの間の値で日付と時刻を表します。
そのため、DateTime(0)とすると、.NETとAccessで日付に差が出てしまうようです。