UTC DateTime解析时间不匹配

时间:2013-08-05 11:43:08

标签: c# datetime

我正在尝试将此字符串Mon Aug 05 08:02:27 +0000 2013转换为DateTime,并且未正确转换时间。时间有些变化。问题出在这里?我使用下面的代码

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

2 个答案:

答案 0 :(得分: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
  );

没有任何DateTimeStyles,默认情况下会返回DateTime“kind”Local,就像您在引用的输出中看到的那样。由于您的输入字符串在+0000位置明确显示zzz,并且您的本地时间与计算机上的+0000不同,因此默认设置是转换为您的时间。

使用DateTimeStyles.AdjustToUniversal,返回值的“种类”为Utc

对于可能较少混淆的日期和时间界面,请考虑Noda Time

答案 1 :(得分: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作为最后一个参数传递。