【问题标题】:Does the C# method TimeZoneInfo.ConvertTime handle DST?C# 方法 TimeZoneInfo.ConvertTime 是否处理 DST?
【发布时间】:2012-04-14 14:42:34
【问题描述】:

我有以下时区列表供用户选择,亚利桑那州的山地标准时间有两次。这些不是他们在选择时看到的。我提取了一个包含所有 Microsoft 时区的网站列表。如果它列出了常规州和亚利桑那州的山地标准时间,我想我会感到困惑。

夏威夷标准时间

阿拉斯加标准时间

太平洋标准时间

山地标准时间

山地标准时间

中部标准时间

中美洲标准时间

东部标准时间

美国东部标准时间

我的问题是我猜这些不考虑 DST,所以我假设我需要在我的转换中添加一些东西来检查它们是否在 DST 中并相应地调整它。这是我现在进行转换的方式。

TimeZoneInfo time = TimeZoneInfo.FindSystemTimeZoneById(LocationProvider.GetLocation(LocationID).TimeZone.Name);
return TimeZoneInfo.ConvertTime(DateTime.Now, time);

【问题讨论】:

标签: c# datetime dst datetimeoffset


【解决方案1】:

是的,TimeZoneInfo 代表 DST,只要您正确使用它(诚然,这并不容易)。目前还不清楚你为什么要尝试做你正在做的事情......

我知道 ID 实际上是时区的标准 ID 令人困惑,但它仍然是一个了解 DST 的完整时区。它不只是意味着“标准时间”。

(如果您对DateTime 等人感到沮丧,并想尝试Noda Time 来满足您的所有日期/时间需求,我很乐意提供帮助:)

【讨论】:

  • 服务器基本上位于德克萨斯州,因此当我保存带有时间戳的内容时,我会将其从服务器上的时间转换为该位置的本地时间。
  • @Jhorra:不要那样做。保存 UTC 时间,仅转换为本地时间以供显示。请注意,当时钟返回时,当地时间最终会变得不明确 - 不要在您不需要的地方使用它们。
  • 这可能是最好的方法,但无论哪种方式,我仍然需要进行转换。我上面的列表与亚利桑那州和 MST 上的所有其他州具有相同的时区。它怎么知道不转换亚利桑那时间?
  • @Jhorra:我不清楚该列表的来源——但两个时区应该有不同的 ID(根据定义)。
  • 啊,列表旁边确实有 ID,我应该使用该 ID 而不是名称吗?我发现以前的例子都使用了这个名字。
猜你喜欢
  • 2014-06-03
  • 2013-02-09
  • 1970-01-01
  • 1970-01-01
  • 2014-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多