DateTime を Int に変換する簡単な方法を見つけたいと思います01/01/1900
(これは Excel の xml で使用されます)。
3657 次
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 に答える