-1

重複の可能性:
Excel のシリアル日付番号を .NET DateTime に変換するにはどうすればよいですか?

DateTime を Int に変換する簡単な方法を見つけたいと思います01/01/1900(これは Excel の xml で使用されます)。

4

2 に答える 2

1

これは組み込みの変換です。

int excelDays = (int)(yourDate.ToOADate());

0は1/1/1900ではなく、12/31/1899であることに注意してください。うるう年のルールに対処する必要を回避しようとしていたLotus123プログラマーがショートカットを使用したため、厄介です。1900年はうるう年ではありませんでした。Excelが起動したとき、Lotusとの互換性が必要でしたが、当時は誰もがLotus123を使用していました。このバグについての良い戦争物語は、このブログ投稿でStackExchangeのCEOであるJoelSpolskyによって書かれました。関連する部分は「Excelのバグです!」です。私は叫んだ。

于 2012-10-13T10:43:29.753 に答える
0

上記のアイデアをまとめた後の私の提案は次のとおりです。

            private Nullable<int> ToInt1900ForExcel(DateTime DT)
    {
        if (DT.Ticks < 599266080000000000)//Below 1900-1-1, Excel has some problems representing dates, search it on the web.
            return null;
        if (DT.Ticks < 599317056000000000)//Excel reproduced a bug from Lotus for compatibility reasons, 29/02/1900 didn't actually exist.
            return (int)(DT.ToOADate()) - 1;
        return (int)(DT.ToOADate());
    }

または、必要に応じて (負の値とゼロは Excel では正常に機能しません)

           private int ToInt1900ForExcel(DateTime DT)
    {
        if (DT.Ticks < 599317056000000000)//Excel reproduced a bug from Lotus for compatibility reasons, 29/02/1900 didn't actually exist.
            return (int)(DT.ToOADate()) - 1;
        return (int)(DT.ToOADate());
    }
于 2012-10-13T12:00:06.060 に答える