如时区标签wiki中所述,有两种不同的时区样式.
Microsoft提供的用于Windows和.Net TimeZoneInfo类的那些由诸如的值标识"Eastern Standard Time".
IANA在TZDB中提供的内容由诸如此类的值标识TimeZoneInfo.
许多基于Internet的API使用IANA时区,但由于多种原因,可能需要将其转换为Windows时区ID,反之亦然.
如何在.Net中实现这一目标?
如何将以下内容转换为System.TimeZone或System.TimeZoneInfo?
{
"timeZone": "America/Los_Angeles",
"currentOffsetMs": -25200000
}
Run Code Online (Sandbox Code Playgroud)
这是我从第三方Web服务获得的数据.
我假设偏移是与UTC的差异,我被告知"America/Los_Angeles"是奥尔森时区.Java将此解析为Java TimeZone没有问题,但我需要将其解析为C#TimeZoneInfo对象.
我有以下代码从位置转换为TimeZone名称.
public TimeZoneResponse ConvertCityToTimeZoneName(string location)
{
TimeZoneResponse response = new TimeZoneResponse();
var plusName = location.Replace(" ", "+");
var address = "http://maps.google.com/maps/api/geocode/json?address=" + plusName + "&sensor=false";
var result = new System.Net.WebClient().DownloadString(address);
var latLongResult = JsonConvert.DeserializeObject<GoogleGeoCodeResponse>(result);
if (latLongResult.status == "OK")
{
var timeZoneRespontimeZoneRequest = "https://maps.googleapis.com/maps/api/timezone/json?location=" + latLongResult.results[0].geometry.location.lat + "," + latLongResult.results[0].geometry.location.lng + "×tamp=1362209227&sensor=false";
var timeZoneResponseString = new System.Net.WebClient().DownloadString(timeZoneRespontimeZoneRequest);
var timeZoneResult = JsonConvert.DeserializeObject<TimeZoneResult>(timeZoneResponseString);
if (timeZoneResult.status == "OK")
{
response.TimeZoneName = timeZoneResult.timeZoneName;
response.Success = true;
return response;
}
}
return response;
Run Code Online (Sandbox Code Playgroud)
}
因此,当我通过"纽约,美国"时,它返回"东部标准时间"
然后我有第二个函数将一个源时区的时间转换为上面的另一个检索时区. …