TimeZoneInfo.ConvertTime 方法未正确转换 DateTime
TimeZoneInfo.ConvertTime method not converting the DateTime correctly
我有以下日期字符串:2015-11-10T23:52:18.5245011Z
当我使用 DateTime.Parse 方法解析它时 returns 11/11/2015 10:52:18 AM
这是不正确的。
我也尝试了以下转换:
TimeZoneInfo est = TimeZoneInfo.FindSystemTimeZoneById("AUS Eastern Standard Time");
DateTime targetTimeUtcconverted = TimeZoneInfo.ConvertTime(UtcDate, est);
它仍然给出:11/11/2015 10:52:18 AM
无法弄清楚我在这里遗漏了什么。
使用:
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 调整为本地时区。
如果不存在偏移量信息,则 returns DateTime
与 Unspecified
种类。
传递 DateTimeStyles.RoundtripKind
告诉它将任何具有偏移量的值视为本地时间(和以前一样),但任何包含 Z
、UTC
、GMT
的值,等等 DateTimeKind.Utc
.
传递 DateTimeStyles.AdjustToUniversal
告诉它输出应该 总是 有 DateTimeKind.Utc
,如果需要应该调整值。
使用 DateTimeOffset.Parse
进行解析会绕过所有这些复杂的行为,而只是 returns 一个具有与所提供内容相匹配的偏移量的值。当输入字符串中存在偏移量(或 Z
)时,这是最佳方法。如果您需要 DateTime
,您可以使用结果 DateTimeOffset
.
中的 UtcDateTime
、LocalDateTime
或 DateTime
属性
只要Kind
是UTC,你给的时区转换码就是正确的。使用 ConvertTimeFromUtc
会更明确,但在这种情况下这并不重要。最好的方法是使用与 DateTimeOffset
值一起使用的 ConvertTime
的重载。结果值将是一个 DateTimeOffset
,其 DateTime
属性 与该时区的时间匹配,其 Offset
属性 是该时间的正确偏移量那个时区。
我有以下日期字符串:2015-11-10T23:52:18.5245011Z
当我使用 DateTime.Parse 方法解析它时 returns 11/11/2015 10:52:18 AM
这是不正确的。
我也尝试了以下转换:
TimeZoneInfo est = TimeZoneInfo.FindSystemTimeZoneById("AUS Eastern Standard Time");
DateTime targetTimeUtcconverted = TimeZoneInfo.ConvertTime(UtcDate, est);
它仍然给出:11/11/2015 10:52:18 AM
无法弄清楚我在这里遗漏了什么。
使用:
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 调整为本地时区。
如果不存在偏移量信息,则 returns DateTime
与 Unspecified
种类。
传递 DateTimeStyles.RoundtripKind
告诉它将任何具有偏移量的值视为本地时间(和以前一样),但任何包含 Z
、UTC
、GMT
的值,等等 DateTimeKind.Utc
.
传递 DateTimeStyles.AdjustToUniversal
告诉它输出应该 总是 有 DateTimeKind.Utc
,如果需要应该调整值。
使用 DateTimeOffset.Parse
进行解析会绕过所有这些复杂的行为,而只是 returns 一个具有与所提供内容相匹配的偏移量的值。当输入字符串中存在偏移量(或 Z
)时,这是最佳方法。如果您需要 DateTime
,您可以使用结果 DateTimeOffset
.
UtcDateTime
、LocalDateTime
或 DateTime
属性
只要Kind
是UTC,你给的时区转换码就是正确的。使用 ConvertTimeFromUtc
会更明确,但在这种情况下这并不重要。最好的方法是使用与 DateTimeOffset
值一起使用的 ConvertTime
的重载。结果值将是一个 DateTimeOffset
,其 DateTime
属性 与该时区的时间匹配,其 Offset
属性 是该时间的正确偏移量那个时区。