如何解析C#中的默认git日期格式
本文关键字:git 日期 格式 默认 何解析 | 更新日期: 2023-09-27 18:21:55
如何在C#中将默认的git格式解析为DateTime?根据git提交的日期参数的格式是什么
git的默认日期格式看起来像Mon Jul 3 17:18:43 2006 +0200
。
现在我无法控制输出,这个字符串来自另一个打印日期的工具,我需要解析它
我不会把它解析为DateTime
,我会把它解析成DateTimeOffset
,因为它里面有一个UTC偏移值。
为什么?因为如果您将其解析为DateTime
,您将获得DateTime
作为Local
,并且它可能为不同的机器生成不同的结果,因为它们可以具有时间的时区偏移。
例如,我在伊斯坦布尔,我们使用东欧时间,使用UTC+02:00。如果我用ParseExact
方法运行您的代码示例,我将获得07/03/2006 18:18:43
作为Local
时间。
为什么?因为在2006年7月3日,我所在的时区是夏令时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
部分,但在这种情况下,它的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
);