1. ホーム
  2. .net

[解決済み] Excelの連番を.NETのDateTimeに変換するには?

2023-04-05 04:51:22

質問

エクセルのシリアルデータから.NETの日付時刻に変換する方法を教えてください。

例えば、39938は2009年05月05日です。

どのように解決するのですか?

39938は1900年1月1日からの日数ですか?

その場合、フレームワークライブラリの関数 DateTime.FromOADate() .

この機能 をカプセル化します。 をカプセル化し、境界チェックを行います。

歴史的な価値のために、可能な実装を紹介します。

(C#)

public static DateTime FromExcelSerialDate(int SerialDate)
{
    if (SerialDate > 59) SerialDate -= 1; //Excel/Lotus 2/29/1900 bug   
    return new DateTime(1899, 12, 31).AddDays(SerialDate);
}

VB

Public Shared Function FromExcelSerialDate(ByVal SerialDate As Integer) As DateTime
    If SerialDate > 59 Then SerialDate -= 1 ' Excel/Lotus 2/29/1900 bug
    Return New DateTime(1899, 12, 31).AddDays(SerialDate)
End Function


[更新】です。]

うーん・・・。ざっと検証してみたところ、実際は2日分の休みになりますね。 どこが違うのかよくわかりません。

OK:問題は今修正されました。詳細はコメントをご覧ください。