我正在尝试使用需要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
?感谢。
答案 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);