如何将excel序列日期转换为.NET日期时间?
例如39938是05/05/2009.
发布于 2009-04-07 20:37:34
其中39938是自1900年1月1日以来的天数?
在这种情况下,请使用框架库函数 。
这个函数encapsulates所有的细节,并做边界检查。
对于它的历史价值,下面是一个可能的实现:
(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更新
嗯..。一个简单的测试表明它实际上是两天的休息。不知道区别在哪里。
好的:现在问题解决了。有关详细信息,请参阅评论。
发布于 2010-04-12 22:56:28
我发现使用FromOADate method更简单,例如:
DateTime dt = DateTime.FromOADate(39938);使用这个代码dt是"05/05/2009“。
发布于 2016-04-13 17:15:39
对于39938,执行以下操作: 39938 * 864000000000 + 599264352000000000
864000000000表示一天中的刻度数599264352000000000表示从公元001年到1900年的刻度数
https://stackoverflow.com/questions/727466
复制相似问题