我正在尝试将此字符串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
答案 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作为最后一个参数传递。