得到当地时间

时间:2013-04-16 22:32:14

标签: .net datetime timezone

int tzO = TimeZone.CurrentTimeZone.IsDaylightSavingTime(DateTime.Now) ? -4 : -5; 

(这是一行代码。有些浏览器将它包装成两行。)为什么这段代码很糟糕?

2 个答案:

答案 0 :(得分:1)

为什么这么糟透了?嗯,这是非常主观的,但我可以告诉你一些事情:

  • 不推荐使用TimeZone类。好吧,它没有被标记为过时,但包括the MSDN page在内的所有指导都说使用了TimeZoneInfo

  • 您正在使用当前时区,然后使用它来手动确定偏移值。有人会认为你是在当前时区的偏移之后 - 而不是你硬编码的那两个之一。

  • 当您通过DateTime.Now时,您依赖当地时间。这并不可怕,但由于夏令时“后退”过渡,你可能可能你有一个模棱两可的时间参考。最好是明确并改为使用UtcNow

  • 您将返回整数小时的整数。许多时区使用半小时偏移,并且有一些罕见的偏移45分钟。您应该使用TimeSpan代替。

所以这段代码没有“吮吸”的版本是:

TimeSpan offset = TimeZoneInfo.Local.GetUtcOffset(DateTime.UtcNow);

答案 1 :(得分:0)

您可以使用DateTime.UtcNow()获取UTC时间。