1

我正在尝试将此字符串转换Mon Aug 05 08:02:27 +0000 2013DateTime,但它没有正确转换时间。时间上有一些变化。这里有什么问题?我使用下面的代码

DateTime.ParseExact("Mon Aug 05 08:02:27 +0000 2013","ddd MMM dd HH:mm:ss zzz yyyy", CultureInfo.InvariantCulture)

它返回的输出是

{05-08-2013 13:32:27}
Date: {05-08-2013 00:00:00}
Day: 5
DayOfWeek: Monday
DayOfYear: 217
Hour: 13
Kind: Local
Millisecond: 0
Minute: 32
Month: 8
Second: 27
Ticks: 635113063470000000
TimeOfDay: {13:32:27}
Year: 2013
4

2 回答 2

3

DateTime很混乱(坏了?)wrt。时区等。

一个快速的解决方案可能是DateTimeStyles.AdjustToUniversal,即:

var d = DateTime.ParseExact("Mon Aug 05 08:02:27 +0000 2013",
  "ddd MMM dd HH:mm:ss zzz yyyy",
  CultureInfo.InvariantCulture,
  DateTimeStyles.AdjustToUniversal
  );

没有 any DateTimeStyles,默认返回 a DateTimeof "kind" Local,正如您在引用的输出中看到的那样。由于您的输入字符串明确地具有+0000位置zzz,并且您的本地时间与+0000您的计算机上不同,因此默认转换为您的时间。

有了DateTimeStyles.AdjustToUniversal,返回值的“种类”是Utc

对于可能不太混乱的日期和时间界面,请考虑Noda Time

于 2013-08-05T12:18:13.637 回答
0

ParseExact 方法将 DateTime 作为本地时间返回,并且您指定输入字符串为 UTC。时移来自您的时区。如果您将生成的 DateTime 转换回 UTC,您应该得到与输入字符串中的时间完全相同的时间。

http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx

要直接获取 UTC 时间,请使用此重载:

http://msdn.microsoft.com/en-us/library/ms131038.aspx

并将 DateTimeStyles.AdjustToUniversal 作为最后一个参数传递。

于 2013-08-05T11:54:05.023 回答