[英]Get Timezone Offset of Server in C#
如何獲取運行我的代碼的物理服務器的時區偏移量? 內存中沒有日期對象或其他對象。
例如,以下代碼將輸出-4:00:00
:
<%= TimeZone.CurrentTimeZone.GetUtcOffset(new DateTime()) %>
因為夏令時應該是-03:00:00
new DateTime()
將為您提供1月1日0001,而不是當前日期/時間。 我懷疑你想要當前的 UTC偏移...這就是你沒有在當前代碼中看到夏令時偏移的原因。
我使用TimeZoneInfo.Local
而不是TimeZone.CurrentTimeZone
- 它可能不會影響事物,但它絕對是一個更好的方法。 TimeZoneInfo
應該在所有代碼中取代TimeZone
。 然后你可以使用GetUtcOffset
:
var offset = TimeZoneInfo.Local.GetUtcOffset(DateTime.UtcNow);
(使用DateTime.Now
應該也能正常工作,但是當現在有夏令時轉換時,它會涉及幕后的一些魔法DateTime
實際上有四種而不是廣告中的三種 ,但更簡單的方法就是通過使用UtcNow
完全避免這個問題。)
或者當然你可以使用我的Noda Time庫而不是所有這些BCL垃圾;)(如果你做了很多日期/時間的工作,我會徹底推薦 - 顯然 - 但如果你只是做這一點,這可能是矯枉過正的。)
GetUtcOffset
如何與new DateTime()
和DateTime.Now
一起使用似乎有些不同。 當我在中央時區運行時,我得到:
TimeZone.CurrentTimeZone.GetUtcOffset(new DateTime()) // -06:00:00
TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now) // -05:00:00
這有點像kludge,但我想你也可以這樣做:
DateTime.Now - DateTime.UtcNow // -05:00:00
當你收縮一個新的DateTime
對象時,它獲得DateTime.MinValue
當你得到它的TimeZone.CurrentTimeZone.GetUtcOffset
你實際得到該日期的時間偏移量。 如果您使用DateTime.Now
您將獲得當前日期和時間以及當前偏移量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.