0

我正在尝试使用需要 UTC 日期的 Web 服务。所以我发现:

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

? 谢谢。

4

1 回答 1

3

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

你应该弄清楚你真正想要的值代表什么。不幸DateTime的是,就清晰度而言,它不能很好地帮助您。您可能需要考虑使用我的Noda Time库 - 或者如果您不这样做,至少在类似的概念中记录您的代码。(听起来您正在尝试将 aLocalDate转换为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);
于 2012-09-24T12:57:39.743 回答