2017-04-21 31 views
1

我使用這個:谷歌轉換時區.NET時區

string url = string.Format("https://maps.googleapis.com/maps/api/timezone/json?location={0},{1}&timestamp=1374868635&sensor=false", lat, lon); 

using (HttpClient cl = new HttpClient()) 
{ 
    string json = await cl.GetStringAsync(url).ConfigureAwait(false); 
    TimeZoneModel timezone = new JavaScriptSerializer().Deserialize<TimeZoneModel>(json); 
} 

得到用戶的時區。這工作正常。我想將其轉換成:

"timeZoneName" : "Central European Summer Time" 

要.net時區?

在該時區不存在時區.NET。

我試圖得到適當的時區有:

TimeZoneInfo tzf = TimeZoneInfo.FindSystemTimeZoneById("Central European Summer Time"); 

不知道如何轉換谷歌時區到.NET時區?那可能嗎 ?

謝謝你們提前!

+1

使用'timeZoneId',不是名字。 – Amy

+0

我會做一個簡單的轉換器方法。就拿你給出的時區,(與.split方法字面上如果你有)打出你想要的數據,然後把它全部重新走到一起的,你的願望作爲一個新的字符串作爲返回值的格式。你將無法使用所有奇特的方法來獲取年,小時,分鐘等,但如果你想要的話,你可以寫出這些。 – coinbird

+0

@coinbird:您是否假設Windows名稱是Google Maps API中返回的名稱的一些排列組合?我肯定*不會*假設這一點。 –

回答

2

而不是使用timeZoneName,我建議使用timeZoneId,這將是一個IANA ID,如Europe/London

然後,您有多種選擇:

  • 查找從到Windows時區映射程序的ID自己,例如與TimeZoneConverter
  • 使用Noda Time和地圖的時區的Windows時區使用TzdbDateTimeZoneSource,例如與TzdbDateTimeZoneSource.WindowsMapping。有關示例代碼,請參見this answer
  • 野田使用的時間和映射到一個Windows時區 - 只使用野田佳彥時間DateTimeZone代替,並用野田時間整個應用程序,對於一般
更好的日期/時間體驗

顯然我喜歡最後的選擇,但我有偏見的野田時間的主要作者...

+0

我用Visual Studio的這個包:https://github.com/mj1856/TimeZoneConverter。 反正謝謝你。問題解決了:) –

+0

@BobSwager:將在答案中提及。不過,如果您正在進行重要的日期/時間工作,我強烈建議您查看野田時間。 –