如何在 C# 中解析默认 git 日期格式
How to parse default git date format in C#
如何在 C# 中将默认 git 格式解析为 DateTime?
根据 What is the format for --date parameter of git commit
git 的默认日期格式类似于 Mon Jul 3 17:18:43 2006 +0200
。
现在我无法控制输出,这个字符串来自另一个打印日期的工具,我需要解析它。
到目前为止我找到的最佳格式字符串是 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
);
我不会将其解析为 DateTime
,我会将其解析为其中的 DateTimeOffset
since it has a UTC offset 值。
为什么?因为如果你将它解析为 DateTime
,你将得到一个 DateTime
作为 Local
并且它 可能 为不同的机器生成不同的结果,因为它们 可以有那个时间的时区偏移量。
例如,我在 Istanbul and we use Eastern European Time 中使用 UTC+02:00。如果我 运行 使用 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 but it's Kind
将是 Unspecified
。
当然,我建议改用Noda Time,这样可以解决大部分日期时间问题。
如何在 C# 中将默认 git 格式解析为 DateTime? 根据 What is the format for --date parameter of git commit
git 的默认日期格式类似于 Mon Jul 3 17:18:43 2006 +0200
。
现在我无法控制输出,这个字符串来自另一个打印日期的工具,我需要解析它。
到目前为止我找到的最佳格式字符串是 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
);
我不会将其解析为 DateTime
,我会将其解析为其中的 DateTimeOffset
since it has a UTC offset 值。
为什么?因为如果你将它解析为 DateTime
,你将得到一个 DateTime
作为 Local
并且它 可能 为不同的机器生成不同的结果,因为它们 可以有那个时间的时区偏移量。
例如,我在 Istanbul and we use Eastern European Time 中使用 UTC+02:00。如果我 运行 使用 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 but it's Kind
将是 Unspecified
。
当然,我建议改用Noda Time,这样可以解决大部分日期时间问题。