首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将Excel序列号转换为.NET DateTime?

如何将Excel序列号转换为.NET DateTime?
EN

Stack Overflow用户
提问于 2009-04-07 20:31:47
回答 4查看 81K关注 0票数 88

如何将excel序列日期转换为.NET日期时间?

例如39938是05/05/2009.

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-04-07 20:37:34

其中39938是自1900年1月1日以来的天数?

在这种情况下,请使用框架库函数

这个函数encapsulates所有的细节,并做边界检查。

对于它的历史价值,下面是一个可能的实现:

(C#)

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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

更新

嗯..。一个简单的测试表明它实际上是两天的休息。不知道区别在哪里。

好的:现在问题解决了。有关详细信息,请参阅评论。

票数 100
EN

Stack Overflow用户

发布于 2010-04-12 22:56:28

我发现使用FromOADate method更简单,例如:

代码语言:javascript
运行
复制
DateTime dt = DateTime.FromOADate(39938);

使用这个代码dt是"05/05/2009“。

票数 180
EN

Stack Overflow用户

发布于 2016-04-13 17:15:39

对于39938,执行以下操作: 39938 * 864000000000 + 599264352000000000

864000000000表示一天中的刻度数599264352000000000表示从公元001年到1900年的刻度数

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/727466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档