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

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

4

2 回答 2

1

为什么它很烂?嗯,这很主观,但我可以告诉你几件事:

  • 该类TimeZone已弃用。好吧,它并没有被标记为过时,但所有的指导,包括MSDN 页面都说要TimeZoneInfo改用。

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

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

  • 您将返回整数小时数。许多时区使用半小时偏移量,少数时区是 45 分钟偏移量。您应该使用 aTimeSpan来代替。

因此,该代码不“糟糕”的版本将是:

TimeSpan offset = TimeZoneInfo.Local.GetUtcOffset(DateTime.UtcNow);
于 2013-04-16T23:04:58.003 回答
0

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

于 2013-04-16T22:44:49.803 回答