2013-10-10 74 views
1

我從網站中找到以下代碼(對不起,我現在不記得現在的引用),但是,它給了我當前時區偏移量爲我的電腦。因此,例如,此代碼:如何獲得正確的時區偏移(從夏令時開始)

Dim plusminus As String = If((tz.Hours > 0), "+", "-") 
Dim NewTimeZone As String = String.Format("{0}{1:00}:{2:00}", plusminus, Math.Abs(tz.Hours), tz.Minutes) 

給我'+09:30'作爲輸出。這是完美的。但是,由於夏令時已經發生影響,現在相同的代碼給了我'+10:30',這實際上是不正確的。

有人可以advsise用於檢索正確的偏移量(無論是在和夏令時的時間),並以相同的格式返回一個更好的方法:事先(+09 30)

感謝

+0

你是依靠對字符串類型,因此沒有什麼可以做(除了硬編碼許多修改參數,如你所願)。處理日期/時間時的邏輯事項依賴於日期/時間類型。如果你使用適當的類型,你會有不同的選擇;例如,依靠不同的時區(DayLight Savings是給定類型的屬性之一):http://msdn.microsoft.com/en-us/library/bb397769.aspx – varocarbas

+0

目前還不清楚你在問什麼。你只顯示字符串格式化代碼 - 而不是你如何獲得'tz'變量。 「正確」是什麼意思?你說+10:30是「不正確的」,因爲它具有DST - 但大多數人會說*不*應用DST將是不正確的。你的用例是什麼? –

回答

3

如果我理解正確,您想查找UTC和當前時間之間的差異,而不考慮夏令時?

如果我是正確的,那麼下面會做你想要什麼:

Dim tzi As TimeZoneInfo = TimeZoneInfo.Local 
Dim offset As TimeSpan = tzi.BaseUtcOffset 
Dim plus As String = If(offset.TotalMinutes >= 0, "+", "") 
Dim newTimeZone As String = String.Format("{0}{1:00}:{2:00}", plus, offset.Hours, offset.Minutes) 

輸出+00:00我的機器上(我的本地時間爲UTC + 1,但我們是在DST目前)

+0

完美的感謝! – Riples