如何解析默认的git格式为C#中的DateTime? 按照What is the format for --date parameter of git commit如何在C#中解析默认的git日期格式
从git的默认日期格式看起来像Mon Jul 3 17:18:43 2006 +0200
。
现在我无法控制输出,这个字符串来自另一个打印日期的工具,我需要解析它。
如何解析默认的git格式为C#中的DateTime? 按照What is the format for --date parameter of git commit如何在C#中解析默认的git日期格式
从git的默认日期格式看起来像Mon Jul 3 17:18:43 2006 +0200
。
现在我无法控制输出,这个字符串来自另一个打印日期的工具,我需要解析它。
我不会解析这DateTime
,因为它有它里面一个UTC offset值我将它解析到DateTimeOffset
。
为什么?因为如果你把它解析到DateTime
,你会得到一个DateTime
作为Local
而且可能产生不同的机器不同的结果,因为他们可以有是时间时区偏移。
例如,我在Istanbul,我们使用的是使用UTC + 02:00的Eastern European Time。如果我用ParseExact
方法运行代码的示例,我会将07/03/2006 18:18:43
作为Local
时间。
为什么?因为在2006年7月3日,my timezone was in a daylight saving time这是UTC + 03:00。这就是为什么它会生成1
小时转发结果。当你解析到DateTime
时,这部分会使它变得模糊不清。
string s = "Mon Jul 3 17:18:43 2006 +0200";
DateTimeOffset dto;
if (DateTimeOffset.TryParseExact(s, "ddd MMM d HH:mm:ss yyyy K",
CultureInfo.InvariantCulture,
DateTimeStyles.None, out dto))
{
Console.WriteLine(dto);
}
现在,你有一个DateTimeOffset
为07/03/2006 17:18:43 +02:00
。在这种情况下,您仍然可以获得DateTime
部分及其.DateTime
property,但它的Kind
将为Unspecified
。
但是,当然,我建议使用Noda Time来代替它,它可以解决大部分DateTime怪异问题。
到目前为止,我发现的最佳格式字符串是ddd MMM d HH:mm:ss yyyy K
。
DateTime date;
DateTime.TryParseExact(
gitDateString,
"ddd MMM d HH:mm:ss yyyy K",
System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.None,
out date
);
谢谢,在我的情况下,我不需要在解析中非常精确,而且它适用于所有在同一时区工作的团队中的工具。但是,下次我会记住这一点。 –