2017-04-21 29 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:将在答案中提及。不过,如果您正在进行重要的日期/时间工作,我强烈建议您查看野田时间。 –