如何在C#中使用Google Timezone API?

时间:2016-06-22 13:55:04

标签: c# google-maps

正如标题所说。我是一名学徒C#开发人员,我实际上是在尝试为SharePoint创建一个时钟Web部件。

我尝试了几个不同的例子,但要么我的Google-fu失败了,要么我在这里做了一些非常错误的事。

那么,有没有一种简单的方法可以使用C#调用Google TimeZone API并存储使用的返回值?

编辑:这里我正在使用的代码在我运行程序时就出错了。

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

1 个答案:

答案 0 :(得分:0)

我自己这样做,确实很容易。在您调用api的url中,选择JSON作为返回类型。然后使用Newtonsoft.Json或JSON.Net将您的http请求响应反序列化到您的GoogleTimeZone对象中。从那里,您可以正常访问这些属性。下面是一段代码,用于调用api并使用nuget中的Newtonsoft.Json转换JSON。

            //var client = new HttpClient();
            //client.DefaultRequestHeaders.Accept.Clear();
            //client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            //var response = client.GetStringAsync(requestUri).Result;
            //var result = JsonConvert.DeserializeObject(response.ToString());