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

时间:2015-11-13 23:59:44

标签: c# git datetime string-parsing

如何在C#中将默认git格式解析为DateTime? 根据{{​​3}}

git的默认日期格式类似于if (i < 3) { printf("zu kurz\n"); stdin_leeren(); return -4; void stdin_leeren(void) { while (getchar() != '\n') { } }

现在我无法控制输出,这个字符串来自另一个打印日期的工具,我需要解析它。

2 个答案:

答案 0 :(得分:1)

我不会将此解析为DateTime,我会将其解析为DateTimeOffset,因为它内部有UTC offset值。

为什么呢?因为如果您将其解析为DateTime,您将获得DateTime Local并且可能为不同的计算机生成不同的结果,因为它们可以< / em>有的时区偏移时间。

例如,我在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);
}

现在,DateTimeOffset07/03/2006 17:18:43 +02:00。您仍然可以使用.DateTime property获取DateTime部分,但在这种情况下,Kind将为Unspecified

但是,当然,我建议使用Noda Time代替可以解决大部分日期时间的奇怪问题。

答案 1 :(得分:0)

到目前为止,我找到的最佳格式字符串是Mon Jul 3 17:18:43 2006 +0200

ddd MMM d HH:mm:ss yyyy K