用途:
DateTime.Parse(s, CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind)
或者:
DateTime.Parse(s, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal)
或者(最佳选择):
DateTimeOffset.Parse(s)
默认情况下,如果字符串中存在任何偏移信息,DateTime.Parse 将调整为本地时间。由于Z 与+00:00 相同,因此假设输入为+00:00,然后从UTC 调整为本地时区。
如果不存在偏移信息,则返回 DateTime 和 Unspecified 种类。
传递DateTimeStyles.RoundtripKind 告诉它将任何具有偏移量的值视为本地时间(如前所述),但任何包含Z、UTC、GMT 等的值都具有DateTimeKind.Utc。
传递DateTimeStyles.AdjustToUniversal 告诉它输出应该总是有DateTimeKind.Utc,如果需要的话应该调整值。
使用DateTimeOffset.Parse 进行解析绕过了所有这些复杂的行为,只返回一个偏移量与提供的值匹配的值。当输入字符串中存在偏移量(或Z)时,这是最好的方法。如果您需要DateTime,可以使用生成的DateTimeOffset 中的UtcDateTime、LocalDateTime 或DateTime 属性。
您提供的时区转换代码是正确的,只要Kind 是UTC。使用ConvertTimeFromUtc 会更明确,但在这种情况下这并不重要。最好的方法是使用与DateTimeOffset 值一起使用的ConvertTime 的重载。结果值将是一个DateTimeOffset,其DateTime 属性与该时区中的时间相匹配,其Offset 属性是该时区中该时间的正确偏移量。