C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 53 を表示中)
■29914 / )  Re[3]: Excelの読み込み字に日付がシリアル値で表示されます
□投稿者/ 魔界の仮面弁士 (950回)-(2008/12/16(Tue) 14:53:02)
No29863 (ひより さん) に返信
> 例)2003/2/25(Excel)→37678(データセットに格納された値)
当方(Excel 2007 SP1 + .NET 2.0 SP1)では再現しませんでした。
こちらの環境では、「37678」ではなく、「37677」になってしまいます。
(.SHO さんの環境も、37678 だったのでしょうか?)

環境の違いだとしたら、厄介ですね…。


■No29904 (みきぬ さん) に返信
> 計算する場合は、Excelが1900年を閏年として扱うことに注意してください。
> # Excel が悪いっつーよりかは、過去のアプリが悪いんだけど

その xls ファイルが、日付を「1904 年から計算する」モードに設定されていた場合、
さらなる値のズレが発生する場合があります。


System.DateTime の FromOADate / ToOADate の場合:(Jet の日付型に対応)
 -657435.0 → 非対応
 -657434.0 →   100年 1月 1日
       : :   :
      -1.0 →  1899年12月29日
       0.0 →  1899年12月30日
       1.0 →  1900年12月31日
       2.0 →  1900年 1月 1日
       : :   :
      59.0 →  1900年 2月27日
      60.0 →  1900年 2月28日
      61.0 →  1900年 3月 1日
       : :   :
 2958465.0 →  9999年12月31日
 2958466.0 → 非対応



Excel の場合:(規定のモード)
      -1.0 → 非対応
       0.0 →  1900年 1月 0日 (★こんな日付はありえない…)
       1.0 →  1900年 1月 1日
       2.0 →  1900年 1月 2日
       : :   :
       : :   :
       : :   :
      58.0 →  1900年 2月27日
      59.0 →  1900年 2月28日
      60.0 →  1900年 2月29日 (★こんな日付はありえない…)
      61.0 →  1900年 3月 1日
       : :   :
 2958465.0 →  9999年12月31日
 2958466.0 → 非対応


Excel の場合:(Date1904モード)★負数の扱いに注意★
 -2957004.0 → 非対応
 -2957003.0 → -9999年12月31日
        : :   :
       -1.0 → -1904年 1月 2日
        0.0 →  1904年 1月 1日
        1.0 →  1904年 1月 2日
        2.0 →  1904年 1月 3日
        : :   :
        : :   :
        : :   :
       58.0 →  1904年 2月28日
       59.0 →  1904年 2月29日
       60.0 →  1904年 3月 1日
       61.0 →  1904年 3月 2日
        : :   :
  2957003.0 →  9999年12月31日
  2957004.0 → 非対応

返信 編集キー/


管理者用

- Child Tree -