2013-04-16 53 views
-3
int tzO = TimeZone.CurrentTimeZone.IsDaylightSavingTime(DateTime.Now) ? -4 : -5; 

(這是一行代碼,有些瀏覽器將其包裝爲兩行)。爲什麼這個代碼很糟糕?獲取當地時間

+1

是否存在與代碼中的問題?如果沒有,這個問題會更適合http://codereview.stackexchange.com/ – DaveShaw

回答

0

您可以使用DateTime.UtcNow()來獲取UTC時間。

1

它爲什麼會吸?嗯,這是相當主觀的,但我可以告訴你兩件事:

  • TimeZone類已被棄用。好吧,它沒有被標記爲過時,但所有的指導,包括the MSDN page說,使用TimeZoneInfo來代替。

  • 您正在拍攝當前時區,然後使用它來手動確定偏移值。人們會認爲你是在當前時區的偏移之後 - 而不是你硬編碼的兩個之一。

  • 當您通過DateTime.Now時,您將依賴當地時間。這並不可怕,但由於夏令時的「後退」轉換,您可能需要,因爲您有一個模糊的時間參考。最好是明確並使用UtcNow來代替。

  • 您正在返回整數個小時。許多時區使用半小時偏移量,並且有一些罕見偏移量爲45分鐘。相反,您應該使用TimeSpan

所以這個代碼不「吸」的版本是:

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