如何解析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的大部分怪异之处。

如何解析C#中的默认git日期格式

到目前为止,我找到的最好的格式字符串是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
);