将Google时区转换为.net时区

Bob*_*ger 5 c#

我正在使用这个:

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);
}
Run Code Online (Sandbox Code Playgroud)

获取用户时区.这很好用.我想转换这个:

"timeZoneName" : "Central European Summer Time"
Run Code Online (Sandbox Code Playgroud)

到.net时区?

在.net时区中,时区不存在.

我试图获得适当的时区:

TimeZoneInfo tzf = TimeZoneInfo.FindSystemTimeZoneById("Central European Summer Time");
Run Code Online (Sandbox Code Playgroud)

知道如何将谷歌时区转换为.net时区吗?那可能吗 ?

提前谢谢你们!

Jon*_*eet 5

timeZoneName我建议使用timeZoneId,而不是使用,这将是一个 IANA ID,例如Europe/London.

然后您有多种选择:

  • 自己查找从该映射到 Windows 时区 ID 的映射,例如使用TimeZoneConverter
  • 使用Noda Time并使用将时区映射到 Windows 时区TzdbDateTimeZoneSource,例如使用TzdbDateTimeZoneSource.WindowsMapping。有关示例代码,请参阅此答案
  • 使用 Noda Time 并且不要将其映射到 Windows 时区 - 只需使用 Noda TimeDateTimeZone代替,并在整个应用程序中使用 Noda Time,以获得更好的日期/时间体验

显然我更喜欢最后一个选项,但作为 Noda Time 的主要作者,我有偏见......