简体   繁体   中英

Converting google time zone to .net timezone

I'm using this:

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);
}

To get user timezone. This works fine. I want to convert this:

"timeZoneName" : "Central European Summer Time"

To .net timezone?

In .net Timezone that timezone does not exists.

I tried to get proper timezone with:

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

Any idea how to convert google timezone to .net timezone? Is that possible?

Thank you guys in advance !

Instead of using timeZoneName , I'd suggest using timeZoneId , which will be an IANA ID such as Europe/London .

You then have various options:

  • Find a mapping from that to Windows time zone IDs yourself, eg with TimeZoneConverter
  • Use Noda Time and map the time zone to a Windows time zone using TzdbDateTimeZoneSource , eg with TzdbDateTimeZoneSource.WindowsMapping . See this answer for sample code.
  • Use Noda Time and don't map it to a Windows time zone - just use the Noda Time DateTimeZone instead, and use Noda Time throughout your app, for a better date/time experience in general

Obviously I favour the last option, but I'm biased as the main author of Noda Time...

" Find a mapping from that to Windows time zone IDs yourself, eg with TimeZoneConverter "

The example usage from the docs:

string tz = TZConvert.IanaToWindows("America/New_York");

// Result:  "Eastern Standard Time"

https://github.com/mattjohnsonpint/TimeZoneConverter

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM