使用DateTimeOffset 类来处理偏移量。
[TestMethod]
public void test()
{
string s = "Mon Nov 16 19:15:09 +0000 2009";
var result = DateTimeOffset.ParseExact(
s,
"ddd MMM dd HH:mm:ss zzz yyyy",
System.Globalization.CultureInfo.InvariantCulture);
Assert.AreEqual(16, result.Day);
Assert.AreEqual(11, result.Month);
Assert.AreEqual(2009, result.Year);
Assert.AreEqual(19, result.Hour);
Assert.AreEqual(15, result.Minute);
Assert.AreEqual(9, result.Second);
Assert.AreEqual(0, result.Offset.Hours);
}
更改字符串中的偏移量 - 例如'0600' 然后更改偏移断言以匹配,它会起作用。
如果需要,您可以将其转换为DateTime - 但您会丢失偏移信息;所以你必须决定是保留原来的当地时间(19:15:09),还是要转换为某个标准时间(例如13:19:05 UTC,如果偏移量是+06:00)。
如果您需要将其转换为您自己的当地时间,这会很有趣 - 因为这将取决于 2009 年那个时候的 DST 规则 - 这可能会引起真正的头痛!
所以,如果您要去DateTime,我建议您转换为世界时,然后从那里开始。将此添加到测试中:
Console.WriteLine(result);
//little bit long winded - but you need the 'Universal' Kind for reliability
Console.WriteLine(
DateTime.SpecifyKind(
new DateTime(result.ToUniversalTime().Ticks),
DateTimeKind.Utc)
);
这个输出:
2009 年 11 月 16 日 19:15:09 +06:00
2009 年 11 月 16 日 13:15:09