int tzO = TimeZone.CurrentTimeZone.IsDaylightSavingTime(DateTime.Now) ? -4 : -5;
(这是一行代码。有些浏览器将它包装成两行。)为什么这段代码很糟糕?
答案 0 :(得分:1)
为什么这么糟透了?嗯,这是非常主观的,但我可以告诉你一些事情:
不推荐使用TimeZone
类。好吧,它没有被标记为过时,但包括the MSDN page在内的所有指导都说使用了TimeZoneInfo
。
您正在使用当前时区,然后使用它来手动确定偏移值。有人会认为你是在当前时区的偏移之后 - 而不是你硬编码的那两个之一。
当您通过DateTime.Now
时,您依赖当地时间。这并不可怕,但由于夏令时“后退”过渡,你可能可能你有一个模棱两可的时间参考。最好是明确并改为使用UtcNow
。
您将返回整数小时的整数。许多时区使用半小时偏移,并且有一些罕见的偏移45分钟。您应该使用TimeSpan
代替。
所以这段代码没有“吮吸”的版本是:
TimeSpan offset = TimeZoneInfo.Local.GetUtcOffset(DateTime.UtcNow);
答案 1 :(得分:0)
您可以使用DateTime.UtcNow()
获取UTC时间。