正如标题所说。我是一名学徒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);
}
}
答案 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());