【问题标题】:how to tell DST if server on UTC如果服务器在 UTC,如何告诉 DST
【发布时间】:2013-08-15 00:36:11
【问题描述】:

我的 Windows Web 应用程序服务器设置为 UTC,因此在时区选择 UI 上没有指示 DST。因此,当我的 c# 代码在该服务器上运行时,DateTime.Now.IsDaylightSavingTime() 总是返回 False。有没有办法检查特定时区(即东部时间)当前是否处于 DST?

谢谢。

【问题讨论】:

    标签: c# timezone dst


    【解决方案1】:

    DateTime.Now 是邪恶的,应该永远在服务器端代码中使用。阅读我关于此主题的博文了解更多信息:The Case Against DateTime.Now。通过仔细编码,您的代码不应该关心服务器的时区设置是什么。

    你正在寻找这个:

    TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
    bool dst = tz.IsDaylightSavingTime(DateTime.UtcNow);
    

    不要让字符串 "Eastern Standard Time" 欺骗您 - 这是美国东部时区的 TimeZoneInfo.Id,包括东部标准时间和东部夏令时间。

    【讨论】:

      【解决方案2】:

      您可以使用TimeZoneInfo.GetSystemTimeZones() 获取所有时区的列表。它返回一个TimeZoneInfo 类型的集合。当你找到正确的,它有一个属性SupportsDaylightSavingTime 告诉你它是否使用 DST。

      之后,您可以致电IsDaylightSavingTime(DateTime),查看指定日期的夏令时是否有效。

      【讨论】:

      • 感谢您的反馈。在IsDaylightSavingTime(DateTime) 的调用中,具体的“日期时间”是什么?
      • @Niner 这是您要查看的日期。如果您想知道 DST 当前是否生效,请通过 DateTime.Now
      • @TheEvilPenguin - 关闭,但实际上您需要通过 DateTime.UtcNow。在 DST 后备转换的第一段中传递 DateTime.Now 将被翻译错误。
      • @MattJohnson 谢谢,我没有考虑过。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-01
      • 2016-02-29
      • 1970-01-01
      • 2015-11-05
      • 2012-03-30
      • 1970-01-01
      相关资源
      最近更新 更多