TimeZoneInfo.ConvertTimeFromUtc
方法是否读取从注册表HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionTime Zone
的日光保存设置来计算本地时间?
如果是这样,它仅在当前时间而不是过去几年或日期工作?我想知道我是否可以在"东部标准时间"中转换过去的日期,例如' 2-1-2010 3:00 pm ''遵循2010年的DLS(日光节省)?以' 2-1-2006 3:00 pm '为例,也以''为例。当您在这里阅读时,DST在2007年为美国发生了变化。
我可以问一下,如果我必须在过去5年中的两个不同当地人(例如马来西亚和纽约(美国东部标准时间))中的SQL数据库中显示约会时间的最佳解决方案是什么?
TimeZoneInfo.ConvertTimeFromUtc
方法是否读取了注册表HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionTime Zone
的日光保存设置以计算当地时间?
是,除了最后一个密钥名称是Time Zones
(您丢弃了s
)。您可以在此MSDN博客文章中阅读有关此操作的工作。
如果是这样,它仅在当前时间而不是过去几年或日期工作?
它将用于Windows注册表数据中存在的任何过去几年。您可以检查注册表中的每个子钥匙,以查看可以为每个区域转换多远。但是,数据中存在各种错误和遗漏。通常,此数据的历史准确性不如其他来源(例如IANA/OLSON时区数据库)那样好,您可以通过NODA时间使用它们。在时区标签Wiki中阅读更多信息。
我想知道我是否可以在"东部标准时间"中转换过去的日期时间,例如'2-1-2010 3:00 pm'到GMT或UTC,遵循该年度DLS(日光节省)2010?也以" 2-1-2006 3:00 pm"为例,也以一个例子为例。当您在这里阅读时,DST在2007年为美国发生了变化。
-
该术语是"日光保存时间"。 - 没有大写字母,白天一个词,缩写的
DST
-
是的,Windows时区数据,
TimeZoneInfo
考虑DST。 -
将转换为 utc,您使用
ConvertTimeToUtc
,而不是ConvertTimeFromUtc
。 -
是的,Windows知道美国2007 DST的变化。但是,它确实不是,知道早期的变化,例如在1987年生效之前的值之前的值。为此,您需要IANA/OLSON数据库。
我可以问一下,如果我必须在过去5年中的两个不同当地人(例如马来西亚和纽约(美国东部标准时间))中的SQL数据库中显示约会时间的最佳解决方案是什么?/blockquote>
使用
TimeZoneInfo
使用纽约的ID"Eastern Standard Time"
ID和马来西亚的"Singapore Standard Time"
ID。使用NODA时间,使用
使用IANA/OLSON时区"America/New_York"
和"Asia/Kuala_Lumpur"
。在您询问的过去5年中,任何一种选项都可以。马来西亚的最后一个时区变化是在1982年。
对于过去的事件,将UTC时间存储在您的数据库中,或将
DateTimeOffset
值存储为事件时区的正确时间和偏移(请参阅DateTime
vsDateTimeOffset
)。根据需要将UTC转换为查看器的时区。用于安排未来事件,将事件的当地时间存储在您的数据库中,然后遵循我在此处编写的指导。
您还将在我的多个课程,日期和时间基础上找到有关此主题的扩展指导。具体来说,您应该考虑观看标题为"时区"的部分。
在我的经验中,
ConvertTimeFromUtc
适用于过去的日期。在不同地区进行外交日期的最佳解决方案:
- 将日期存储为UTC(您可能必须运行一个脚本才能转换现有的整体)
- 显示时使用相关时区上的
ConvertTimeFromUtc
。(如果它不起作用,请尝试在从DB返回的日期更改DateTime.DateTimeKind
)(我不确定美国在日光节省上的变化,通常是使用固定公式计算的。)