UTC时间转换

时间:2012-09-24 12:51:03

标签: c# .net c#-4.0

我正在尝试使用需要UTC日期的网络服务。所以我找到了:

private static string GetDate(DateTime DateTime)
{
    DateTime UtcDateTime = TimeZoneInfo.ConvertTimeToUtc(DateTime);
    return XmlConvert.ToString(UtcDateTime, XmlDateTimeSerializationMode.Utc);
}

如果我这样做:

DateTime DT1 = new DateTime(2012, 3, 25);
DateTime DT2 = new DateTime(2012, 3, 26);
string s1 = GetDate(DT1);
string s2 = GetDate(DT2);

s1包含:

2012-03-25T00:00:00Z

和s2包含:

2012-03-25T23:00:00Z

为什么s2不包含:

2012-03-26T00:00:00Z

?感谢。

1 个答案:

答案 0 :(得分:3)

London time zone在3月25日凌晨1点(当地时间)进行了夏令时转换,从UTC + 0转为UTC + 1。所以3月26日在英国的当地午夜正好是2012-03-25 23:00:00在UTC。这几乎可以肯定是问题的原因。

你应该弄清楚真正,想要表示的值。不幸的是DateTime在清晰度方面帮助你到这里并不是很好。您可能希望考虑使用我的Noda Time库 - 或者如果您不这样做,至少在类似的concepts中记录您的代码。 (听起来你正试图将LocalDate转换为Instant,为了做到这一点,你需要找出你真正想要的时区。)

可能完全有可能逃脱:

DateTime DT1 = new DateTime(2012, 3, 25, 0, 0, 0, DateTimeKind.Utc);
DateTime DT2 = new DateTime(2012, 3, 26, 0, 0, 0, DateTimeKind.Utc);