int tzO = TimeZone.CurrentTimeZone.IsDaylightSavingTime(DateTime.Now) ? -4 : -5;
(這是一行代碼,有些瀏覽器將其包裝爲兩行)。爲什麼這個代碼很糟糕?獲取當地時間
int tzO = TimeZone.CurrentTimeZone.IsDaylightSavingTime(DateTime.Now) ? -4 : -5;
(這是一行代碼,有些瀏覽器將其包裝爲兩行)。爲什麼這個代碼很糟糕?獲取當地時間
您可以使用DateTime.UtcNow()
來獲取UTC時間。
它爲什麼會吸?嗯,這是相當主觀的,但我可以告訴你兩件事:
的TimeZone
類已被棄用。好吧,它沒有被標記爲過時,但所有的指導,包括the MSDN page說,使用TimeZoneInfo
來代替。
您正在拍攝當前時區,然後使用它來手動確定偏移值。人們會認爲你是在當前時區的偏移之後 - 而不是你硬編碼的兩個之一。
當您通過DateTime.Now
時,您將依賴當地時間。這並不可怕,但由於夏令時的「後退」轉換,您可能需要,因爲您有一個模糊的時間參考。最好是明確並使用UtcNow
來代替。
您正在返回整數個小時。許多時區使用半小時偏移量,並且有一些罕見偏移量爲45分鐘。相反,您應該使用TimeSpan
。
所以這個代碼不「吸」的版本是:
TimeSpan offset = TimeZoneInfo.Local.GetUtcOffset(DateTime.UtcNow);
是否存在與代碼中的問題?如果沒有,這個問題會更適合http://codereview.stackexchange.com/ – DaveShaw