我在电子表格中有一个单元格,它在Excel中是date对象,但当它从C1的xls类中出来时,它就变成了双精度型(类似于2009年1/7的39820.0 )。我看到这是朱利安日期格式。有人能告诉我如何在C#中将其解析回DateTime吗?
更新:看起来我可能没有儒略日期,而是自1899年12月30日以来的天数。
发布于 2009-02-04 21:42:33
我认为Excel只是使用了标准的OLE Automation DATE类型,它可以用DateTime.FromOADate方法进行转换。
这段代码,
using System;
namespace DateFromDouble
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(DateTime.FromOADate(39820.0));
}
}
}输出:
1/7/2009 12:00:00 AM发布于 2009-02-04 20:51:57
在System.Globalization中有一个JulianCalendar类;下面介绍如何使用它:
JulianCalendar c = new JulianCalendar();
DateTime time = c.ToDateTime(2009, 1, 7, 0, 0, 0, 0);
Console.WriteLine(time.ToShortDateString());编辑:
如果它实际上是从"1900“开始的,下面是你可以这样做的方法:
public static DateTime DaysSince1900(int days)
{
return new DateTime(1900, 1, 1).AddDays(days);
}
DateTime time = DaysSince1900(39820);
Console.WriteLine(time.ToShortDateString()); //will result in "1/9/2009"发布于 2009-02-04 20:51:10
这个数字看起来像是“自1900年以来的天数”值。
https://stackoverflow.com/questions/513247
复制相似问题