我正在编写一个应用程序,该应用程序应根据您提供的坐标(经纬度)给出本地时间。
我只知道两种方法可以做到这一点:
1st:获取TimeZone名称,然后找到其本地时间。第二:使用Google API接收时间作为偏移量,并且UTC不在本地。
我决定使用第一种方法,因为它似乎更容易,所以我决定使用GeoTimeZone来获取时区...问题是那我不知道如何获取该TimeZone上的当地时间...这是我为获取TimeZone名称而编写的代码。
string tz = TimeZoneLookup.GetTimeZone(lat, lon).Result;
变量lat
&lon
当然是坐标。
谢谢!
编辑:我的问题是如何获取该TimeZone上的LocalTime?
您可以使用Google api识别当前时区。
.Net小提琴示例:
public class Program
{
public static DateTime GetLocalDateTime(double latitude, double longitude, DateTime utcDate)
{
var client = new RestClient("https://maps.googleapis.com");
var request = new RestRequest("maps/api/timezone/json", Method.GET);
request.AddParameter("location", latitude + "," + longitude);
request.AddParameter("timestamp", utcDate.ToTimestamp());
request.AddParameter("sensor", "false");
var response = client.Execute<GoogleTimeZone>(request);
return utcDate.AddSeconds(response.Data.rawOffset + response.Data.dstOffset);
}
public static void Main()
{
var myDateTime = GetLocalDateTime(33.8323, -117.8803, DateTime.UtcNow);
Console.WriteLine(myDateTime.ToString());
}
}
public class GoogleTimeZone
{
public double dstOffset { get; set; }
public double rawOffset { get; set; }
public string status { get; set; }
public string timeZoneId { get; set; }
public string timeZoneName { get; set; }
}
public static class ExtensionMethods
{
public static double ToTimestamp(this DateTime date)
{
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
TimeSpan diff = date.ToUniversalTime() - origin;
return Math.Floor(diff.TotalSeconds);
}
}
然后,您可以轻松使用GetLocalDateTime(double latitude, double longitude, DateTime utcDate)
上面示例中显示的方法:
public static void Main()
{
var myDateTime = GetLocalDateTime(33.8323, -117.8803, DateTime.UtcNow);
Console.WriteLine(myDateTime.ToString());
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句