2017-10-04 128 views
0

我有一個代碼,我需要從中歐時區查找UTC的當前偏移量。獲取時區的時間偏移

我的代碼部署在Azure應用服務中。

var offset = DateTimeOffset.Now.Offset.Hours + ":" + 
      DateTimeOffset.Now.Offset.Minutes; 

上面代碼的問題是,它依賴於服務器的時候,即使我的應用服務在西歐,Azure的應用程序服務的時區總是UTC。

一個解決方案是將Azure App Service TimeZone更改爲Desired TimeZone,它可以工作,但我也在使用代碼獲取偏移量。

記住我不能使用系統日期時間來獲得偏移量,因爲它始終是UTC。

無論系統日期時間如何,我可以獲得Current Central Europe DatetimeOffset嗎?

回答

0

您可以使用TimeZoneInfo

TimeZoneInfo cetInfo = TimeZoneInfo.FindSystemTimeZoneById("Central Europe Standard Time"); 
DateTimeOffset cetTime = TimeZoneInfo.ConvertTime(DateTimeOffset.Now, cetInfo); 
+0

TimeZoneInfo沒有ConvertTo方法。但我猜ConvertTime是選項。我會嘗試 –

+0

@MandarJogalekar更正它。檢查帖子。 – Sefe

1

你可以做這樣的事情

TimeZoneInfo cet = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time"); 

DateTimeOffset offset = TimeZoneInfo.ConvertTime(DateTime.Now, cet); 

如上所述here

如果您不確定TimeZoneId,則可以使用GetSystemTimeZones()來查找。

的替代,如描述here,將做這樣的事情

DateTime nowCet = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Now, 
    "Central European Standard Time"); 

關於這樣做的好處是,你可以很容易地計算出兩個時區等之間的差異,例如

DateTime newYork = new DateTime(2017, 10, 04, 12, 23, 00); 
DateTime berlin = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(newYork, 
    "Eastern Standard Time", "Central European Standard Time"); 

TimeSpan diff = berlin - newYork; 
+0

這是照看DayLightSavings嗎? –

+0

@MandarJogalekar我不確定你的意思? – Gareth

+0

我的意思是,當由於夏令時而改變時鐘時,該方法是否會根據當時的設置返回正確的時間? –