gpt4 book ai didi

c# - 使用 TimeZoneInfo.ConvertTimeToUtc(DateTime, TimeZoneInfo) 方法时,在 DST 结束日期将时间从本地时间转换为 UTC 的问题

转载 作者:太空宇宙 更新时间:2023-11-03 23:34:48 27 4
gpt4 key购买 nike

我有一个将本地时间转换为 UTC 并将其存储在数据库中的应用程序。我在特定日期测试转换时遇到了这个问题 - 2015 年 11 月 1 日(夏令时结束的日期(时钟在到达凌晨 2 点时回到凌晨 1 点))。

我的本​​地系统时区是 (UTC-08:00) 太平洋时间(美国和加拿大)我将时间 2015-10-31 01:49:00.000 转换为 UTC,输出为 2015-10-31 08:49:00.000。

但是

当我尝试将 2015-11-01 01:49:00.000 转换为 UTC 时,输出为 2015-10-31 09:49:00.000。

这不是错了吗?为什么转换时间在 11 月 1 日增加了一个小时?

这是我的方法,

DateTime universalFormatDateTime = localDateTime.Value.GetUniversalFormatDateTime();
utcDateTime = TimeZoneInfo.ConvertTimeToUtc(universalFormatDateTime, _timeZoneInfo);

最佳答案

Isn't this wrong? why did the converted time increase by an hour on 1st November?

因为正如您所说,那是时钟改变的时候。

问题是“2015-11-01 01:49:00.000”在太平洋时间不明确 - 它出现了两次,一次在 2015-11-01T08:49:00Z,一次在 2015-11-01T09:49 :00Z.

日期时间 can remember which of those you mean ,但这取决于您如何得出该值。如果您刚刚从某个地方的文本中解析了它,那么您基本上没有足够的信息 - 它没有指定一个时间点。

如果你要使用我的 Noda Time库,然后在从 LocalDateTime 转换为 ZonedDateTime 时,您可以指定希望如何处理歧义 - 这样可能您的一个选择...但这取决于值的来源,以及您是否知道它是总是第二次出现还是总是第一次出现。

如果你还想使用TimeZoneInfo,你可以使用TimeZoneInfo.IsAmbiguousTimeTimeZoneInfo.IsInvalidTime检测因时区变化而出现两次或零次的本地时间,然后在您的应用中适本地处理这些时间。

关于c# - 使用 TimeZoneInfo.ConvertTimeToUtc(DateTime, TimeZoneInfo) 方法时,在 DST 结束日期将时间从本地时间转换为 UTC 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30909424/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com