TimeZoneInfo 过去几年的时间转换
Time Conversion with TimeZoneInfo for past years
TimeZoneInfo.ConvertTimeFromUtc
方法是否从注册表中读取夏令时设置 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zone
来计算当地时间?
如果是这样,它是否只适用于当前时间而不适用于过去的年份或日期?我想知道我是否可以在 'Eastern Standard Time' 中转换 过去的日期时间 ,例如 '2-1-2010 3:00 PM' 到 2010 年 DLS(夏令时)之后的 GMT 或 UTC?以另一年为例,例如 '2-1-2006 3:00 PM'。在您阅读 here 时,美国的 DST 在 2007 年发生了变化。
请问,如果我必须在马来西亚和纽约(美国东部标准时间)等两个不同的地方显示来自 SQL 数据库的预约时间,那么最佳解决方案是什么?过去 5 年?
根据我的经验,ConvertTimeFromUtc
适用于过去的日期。
在不同语言环境中显示日期的最佳解决方案:
- 将日期存储为 UTC(您可能需要 运行 一个脚本来转换现有的整体)
- 显示时使用相关时区的
ConvertTimeFromUtc
。 (如果它不起作用,请尝试在从数据库返回的日期更改 DateTime.DateTimeKind
)
(我不确定美国夏令时的变化,通常使用固定公式计算。)
Does the TimeZoneInfo.ConvertTimeFromUtc
method read the daylight saving settings from the registry HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zone
to calculate the local time?
是的,除了最后一个键名是 Time Zones
(您删除了一个 s
)。您可以在 this MSDN blog article.
中了解其工作原理
If so, does it work for only the current time and not for any past years or dates?
它将适用于 Windows 注册表数据中存在的任何过去年份。您可以检查注册表中的每个子项,看看您可以为每个区域转换多远。但是,数据中存在各种错误和遗漏。一般来说,此数据的历史准确性不如其他来源(例如 IANA/Olson 时区数据库,您可以通过 Noda Time. Read more in the timezone tag wiki.
使用)
I would like to know if I can convert a past date time in 'Eastern Standard Time' like '2-1-2010 3:00 PM' to GMT or UTC which follows the DLS (Day Light Saving) for the year 2010? Take another year like '2-1-2006 3:00 PM' as an example also. As you read here, the DST has changed in 2007 for the US.
术语是"daylight saving time" - 没有大写字母,一个单词表示日光,缩写为DST
是的,Windows时区数据,TimeZoneInfo
考虑夏令时。
要将 转换为 UTC,请使用 ConvertTimeToUtc
,而不是 ConvertTimeFromUtc
。
是的,Windows 知道美国 2007 年夏令时的变化。它确实 而不是 但是,了解 earlier changes, such as values before the Uniform Time Act 于 1987 年生效。为此,您需要 IANA/Olson 数据库。
May I ask, what is the best solution if I have to display an appointment time from a SQL database in two different locals like Malaysia and New York (USA Eastern Standard Time) for a visitor in the past 5 years?
Using TimeZoneInfo
纽约使用 ID "Eastern Standard Time"
ID,马来西亚使用 "Singapore Standard Time"
ID。
使用 IANA/Olson 时区与 Noda Time、使用 "America/New_York"
和 "Asia/Kuala_Lumpur"
.
对于您询问的过去 5 年,任何一个选项都可以。 Malaysia's last time zone change was in 1982.
对于过去的事件,将 UTC 时间存储在您的数据库中,或者使用正确的时间和事件时区的偏移量存储 DateTimeOffset
值(参见 DateTime
vs DateTimeOffset
) .根据显示需要从 UTC 转换为查看者的时区。
要安排未来的活动,请将活动的本地时间存储在您的数据库中,并遵循 the guidance I've written here。
您还可以在我的 Pluralsight 课程 Date and Time Fundamentals 中找到有关此主题的扩展指导。具体来说,您应该考虑观看标题为 "Time Zones"、"Date and Time in the .NET Framework" 和 "Introducing Noda Time".
的部分
TimeZoneInfo.ConvertTimeFromUtc
方法是否从注册表中读取夏令时设置 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zone
来计算当地时间?
如果是这样,它是否只适用于当前时间而不适用于过去的年份或日期?我想知道我是否可以在 'Eastern Standard Time' 中转换 过去的日期时间 ,例如 '2-1-2010 3:00 PM' 到 2010 年 DLS(夏令时)之后的 GMT 或 UTC?以另一年为例,例如 '2-1-2006 3:00 PM'。在您阅读 here 时,美国的 DST 在 2007 年发生了变化。
请问,如果我必须在马来西亚和纽约(美国东部标准时间)等两个不同的地方显示来自 SQL 数据库的预约时间,那么最佳解决方案是什么?过去 5 年?
根据我的经验,ConvertTimeFromUtc
适用于过去的日期。
在不同语言环境中显示日期的最佳解决方案:
- 将日期存储为 UTC(您可能需要 运行 一个脚本来转换现有的整体)
- 显示时使用相关时区的
ConvertTimeFromUtc
。 (如果它不起作用,请尝试在从数据库返回的日期更改DateTime.DateTimeKind
)
(我不确定美国夏令时的变化,通常使用固定公式计算。)
Does the
TimeZoneInfo.ConvertTimeFromUtc
method read the daylight saving settings from the registryHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zone
to calculate the local time?
是的,除了最后一个键名是 Time Zones
(您删除了一个 s
)。您可以在 this MSDN blog article.
If so, does it work for only the current time and not for any past years or dates?
它将适用于 Windows 注册表数据中存在的任何过去年份。您可以检查注册表中的每个子项,看看您可以为每个区域转换多远。但是,数据中存在各种错误和遗漏。一般来说,此数据的历史准确性不如其他来源(例如 IANA/Olson 时区数据库,您可以通过 Noda Time. Read more in the timezone tag wiki.
使用)I would like to know if I can convert a past date time in 'Eastern Standard Time' like '2-1-2010 3:00 PM' to GMT or UTC which follows the DLS (Day Light Saving) for the year 2010? Take another year like '2-1-2006 3:00 PM' as an example also. As you read here, the DST has changed in 2007 for the US.
术语是"daylight saving time" - 没有大写字母,一个单词表示日光,缩写为
DST
是的,Windows时区数据,
TimeZoneInfo
考虑夏令时。要将 转换为 UTC,请使用
ConvertTimeToUtc
,而不是ConvertTimeFromUtc
。是的,Windows 知道美国 2007 年夏令时的变化。它确实 而不是 但是,了解 earlier changes, such as values before the Uniform Time Act 于 1987 年生效。为此,您需要 IANA/Olson 数据库。
May I ask, what is the best solution if I have to display an appointment time from a SQL database in two different locals like Malaysia and New York (USA Eastern Standard Time) for a visitor in the past 5 years?
Using
TimeZoneInfo
纽约使用 ID"Eastern Standard Time"
ID,马来西亚使用"Singapore Standard Time"
ID。使用 IANA/Olson 时区与 Noda Time、使用
"America/New_York"
和"Asia/Kuala_Lumpur"
.对于您询问的过去 5 年,任何一个选项都可以。 Malaysia's last time zone change was in 1982.
对于过去的事件,将 UTC 时间存储在您的数据库中,或者使用正确的时间和事件时区的偏移量存储
DateTimeOffset
值(参见DateTime
vsDateTimeOffset
) .根据显示需要从 UTC 转换为查看者的时区。要安排未来的活动,请将活动的本地时间存储在您的数据库中,并遵循 the guidance I've written here。
您还可以在我的 Pluralsight 课程 Date and Time Fundamentals 中找到有关此主题的扩展指导。具体来说,您应该考虑观看标题为 "Time Zones"、"Date and Time in the .NET Framework" 和 "Introducing Noda Time".
的部分