C# Julian 日期解析器
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/513247/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
C# Julian Date Parser
提问by Jake Pearson
I have a cell in a spreadsheet that is a date object in Excel but becomes a double (something like 39820.0 for 1/7/2009) when it comes out of C1's xls class. I read this is a Julian date format. Can someone tell me how to parse it back into a DateTime in C#?
我在电子表格中有一个单元格,它是 Excel 中的日期对象,但是当它从 C1 的 xls 类中出来时变成了双精度(类似于 2009 年 1 月 7 日的 39820.0)。我读到这是儒略日期格式。有人能告诉我如何将它解析回 C# 中的 DateTime 吗?
Update: It looks like I might not have a Julian date, but instead the number of days since Dec 30, 1899.
更新:看起来我可能没有 Julian 日期,而是自 1899 年 12 月 30 日以来的天数。
采纳答案by GBegen
I think Excel is just using the standard OLE Automation DATEtype which can be converted with the DateTime.FromOADate
method.
我认为 Excel 只是使用标准的 OLE 自动化DATE类型,可以使用该DateTime.FromOADate
方法进行转换。
This block of code,
这段代码,
using System;
namespace DateFromDouble
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(DateTime.FromOADate(39820.0));
}
}
}
outputs:
输出:
1/7/2009 12:00:00 AM
回答by Kevin Babcock
回答by Kieron
That number looks like a 'number of days since 1900' value.
该数字看起来像是“自 1900 年以来的天数”值。
回答by BFree
There's a JulianCalendar class in System.Globalization; Here's how you would use it:
System.Globalization 中有一个 JulianCalendar 类;以下是您将如何使用它:
JulianCalendar c = new JulianCalendar();
DateTime time = c.ToDateTime(2009, 1, 7, 0, 0, 0, 0);
Console.WriteLine(time.ToShortDateString());
EDIT:
编辑:
If it is in fact days since "1900" here's how you can do it:
如果实际上是自“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"
回答by localman
回答by Metro Smurf
When dealing with Excel dates, the date may be the string representation of a date, or it may be an OA date. This is an extension method I wrote a while back to help facilitate the date conversion:
在处理 Excel 日期时,日期可能是日期的字符串表示,也可能是 OA 日期。这是我不久前写的一个扩展方法,以帮助促进日期转换:
/// <summary>
/// Sometimes the date from Excel is a string, other times it is an OA Date:
/// Excel stores date values as a Double representing the number of days from January 1, 1900.
/// Need to use the FromOADate method which takes a Double and converts to a Date.
/// OA = OLE Automation compatible.
/// </summary>
/// <param name="date">a string to parse into a date</param>
/// <returns>a DateTime value; if the string could not be parsed, returns DateTime.MinValue</returns>
public static DateTime ParseExcelDate( this string date )
{
DateTime dt;
if( DateTime.TryParse( date, out dt ) )
{
return dt;
}
double oaDate;
if( double.TryParse( date, out oaDate ) )
{
return DateTime.FromOADate( oaDate );
}
return DateTime.MinValue;
}
回答by Madcat
Just format the cell(s) in question as Date, use CTRL+1, and select the your desired format.
只需将有问题的单元格格式化为日期,使用 CTRL+1,然后选择所需的格式。