【发布时间】:2013-08-15 00:36:11
【问题描述】:
我的 Windows Web 应用程序服务器设置为 UTC,因此在时区选择 UI 上没有指示 DST。因此,当我的 c# 代码在该服务器上运行时,DateTime.Now.IsDaylightSavingTime() 总是返回 False。有没有办法检查特定时区(即东部时间)当前是否处于 DST?
谢谢。
【问题讨论】:
我的 Windows Web 应用程序服务器设置为 UTC,因此在时区选择 UI 上没有指示 DST。因此,当我的 c# 代码在该服务器上运行时,DateTime.Now.IsDaylightSavingTime() 总是返回 False。有没有办法检查特定时区(即东部时间)当前是否处于 DST?
谢谢。
【问题讨论】:
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,包括东部标准时间和东部夏令时间。
【讨论】:
您可以使用TimeZoneInfo.GetSystemTimeZones() 获取所有时区的列表。它返回一个TimeZoneInfo 类型的集合。当你找到正确的,它有一个属性SupportsDaylightSavingTime 告诉你它是否使用 DST。
之后,您可以致电IsDaylightSavingTime(DateTime),查看指定日期的夏令时是否有效。
【讨论】:
IsDaylightSavingTime(DateTime) 的调用中,具体的“日期时间”是什么?
DateTime.Now
DateTime.UtcNow。在 DST 后备转换的第一段中传递 DateTime.Now 将被翻译错误。