【问题标题】:How to check DST status for specified timezones如何检查指定时区的 DST 状态
【发布时间】:2015-12-19 04:59:01
【问题描述】:

我想检查是否有任何指定的时区(我的本地时区除外)在 DST 中。

检查本地时区当前是否是我正在使用的 DST:

Dim today_date As Date = Now.Date
Msgbox(today_date.IsDaylightSavingTime())

我想检查其他时区(“美国东部标准时间”和“新西兰标准时间”)是否在今天的 DST 中。

所以我到目前为止:

Dim AusZoneId As String = "A.U.S. Eastern Standard Time" 
Dim AusZone As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(AusZoneId)
MsgBox(AusZone.SupportsDaylightSavingTime) 
'Established True or False if TZ supported DST

我想要做的是输入一个日期(例如今天),看看这个根据澳大利亚东部标准时间的日期是否在 DST。

【问题讨论】:

  • "A.U.S. Eastern Standard Time" 不是有效的 Windows 时区标识符。它应该没有句点,如"AUS Eastern Standard Time"。密钥需要完全匹配HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones 的注册表中找到的 ID。
  • 谢谢马特。我的价值观来自msdn.microsoft.com/en-us/library/…
  • 是的,这个列表已经很老了。 Windows 嵌入式 POS 1.1。此外,这些是名称,而不是 ID。那个时代的 ID 是数字,但在任何地方都不再使用。

标签: vb.net timezone dst


【解决方案1】:

您不应该在 date 上这样做,因为这可能是模棱两可的(标准时间为一天的开始,白天为一天的结束,反之亦然),而是询问特定时间点是否在白天:

Dim zoneId As String = "AUS Eastern Standard Time";   
Dim zone As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(zoneId)
Dim dst As Boolean = zone.IsDaylightSavingTime(DateTime.UtcNow)

(当然,也可以使用其他时间点。)我强烈建议您通过 KindUtc 传递 DateTime

【讨论】:

  • 感谢您的回答。同意,使用 DateTime 而不是 Date 绝对有意义。
猜你喜欢
  • 1970-01-01
  • 2012-03-06
  • 2018-03-03
  • 2011-09-24
  • 1970-01-01
  • 2016-08-11
  • 2015-07-22
  • 1970-01-01
  • 2013-11-26
相关资源
最近更新 更多