我有一个城市列表(纽约,伦敦等),我需要做一些时区转换,但我发现大多数API要求您知道时区名称(例如东部标准时间,东京标准时间等。)
无论如何将城市名称转换为适当的TimeZone名称? (在纽约通过并返回“东部标准时间”)
答案 0 :(得分:6)
不知道C#内置的内容,但您可以使用Google Maps API:
1)获取城市的长/纬:http://maps.googleapis.com/maps/api/geocode/json?address=New%20York,%20CA&sensor=false
2)现在使用那些long / lat获取时区:https://maps.googleapis.com/maps/api/timezone/json?location=43.2994285,-74.21793260000001×tamp=1362209227&sensor=false
示例代码:
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;
}
答案 1 :(得分:2)
您可以使用知识共享署名3.0许可下的免费时区数据库。你可以在这里找到相关的信息:
您可以按原样使用SQL,也可以将sql数据库拉入应用程序的某些类中......
答案 2 :(得分:2)
EarthTools.org有一个免费的网络服务,您可以通过lat / long查询:
http://www.earthtools.org/timezone/<latitude>/<longitude>
纽约的例子:
http://www.earthtools.org/timezone-1.1/40.71417/-74.00639
但是不,我不知道有任何这样做的上课课程。
答案 3 :(得分:0)
.net框架中最接近的是TimeZonInfo.GetSystemTimeZones()。
请注意,您的案例中没有一对一的映射,例如,悉尼,一个在澳大利亚,另一个在加拿大。
答案 4 :(得分:0)
使用C#TimeZoneInfo
,您可以这样做
TimeZoneInfo.GetSystemTimeZones()
.Where(k=>k.DisplayName.Substring(k.DisplayName.IndexOf(')')+2).ToLower().IndexOf("tokyo") >= 0)
.ToList()
说明:
我使用显示名称来确定每个时区的城市,该时区采用以下格式,例如"(UTC+02:00) Beirut"
。然后采用索引 ")"
+ 2 并采用不带前导空格的下一个字符串,然后进行查询。
将按城市返回匹配的时区。