与TimeZoneInfo的时间转换过去几年



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时间,使用"America/New_York""Asia/Kuala_Lumpur"

    使用IANA/OLSON时区
  • 在您询问的过去5年中,任何一种选项都可以。马来西亚的最后一个时区变化是在1982年。

  • 对于过去的事件,将UTC时间存储在您的数据库中,或将DateTimeOffset值存储为事件时区的正确时间和偏移(请参阅DateTime vs DateTimeOffset)。根据需要将UTC转换为查看器的时区。

  • 用于安排未来事件,将事件的当地时间存储在您的数据库中,然后遵循我在此处编写的指导。

您还将在我的多个课程,日期和时间基础上找到有关此主题的扩展指导。具体来说,您应该考虑观看标题为"时区"的部分。

在我的经验中,ConvertTimeFromUtc适用于过去的日期。

在不同地区进行外交日期的最佳解决方案:

  • 将日期存储为UTC(您可能必须运行一个脚本才能转换现有的整体)
  • 显示时使用相关时区上的ConvertTimeFromUtc。(如果它不起作用,请尝试在从DB返回的日期更改DateTime.DateTimeKind

(我不确定美国在日光节省上的变化,通常是使用固定公式计算的。)

相关内容

  • 没有找到相关文章

最新更新