C#:无法解析正确的日期和时间设置为当前系统时间区
我有它返回一个json
这样的服务:C#:无法解析正确的日期和时间设置为当前系统时间区
[
{
"title":"First event",
"startDate":"\/Date(1495512000000-0400)\/",
"endDate":"\/Date(1495857540000-0400)\/",
}
]
我反序列化JSON输出到列表中相对于模型我已经定义:
型号
public class EventModel
{
[JsonProperty("title")]
public string Title { get; set; }
[JsonProperty("startDate")]
public DateTime StartDate { get; set; }
[JsonProperty("endDate")]
public DateTime EndDate { get; set; }
}
C#deseria的代码lization
我正在使用Newtonsoft.Json
包进行反序列化。
List<EventModel> lstEvent = new List<EventModel>();
lstEvent = JsonConvert.DeserializeObject<List<EventModel>>(await objMyServices.GetData());
所以,当我调试我得到以下输出在两个不同的时区这种情况下:
对于GMT + 5:30(加尔各答 - 印度):
开始时间:23 -05-2017 09:30:00
结束时间:27-05-2017九时29分零零秒
对于GMT-4:00(纽约):
开始时间:23-05-2017 00:00:00
结束时间:26-05-2017 23:59:00
因此,对于每一条记录,开始时间不解析,当我切换到GMT-4:00(纽约)时的相应系统时区。 我在这里错过了什么?
Json.NET允许您指定通过DateTimeZoneHandling序列化程序设置返回什么样的DateTime(UTC,Local)。默认是本地。
要返回UTC日期时间,使用DateTimeZoneHandling.Utc:
var settings = new Newtonsoft.Json.JsonSerializerSettings()
{
DateTimeZoneHandling = DateTimeZoneHandling.Utc
};
var content=await objMyServices.GetData();
var lstEvent = JsonConvert.DeserializeObject<List<EventModel>>(content, settings);
也许是更好的选择是改变属性类型的DateTimeOffset。这种类型保留了原始偏移量。
当我将属性更改为DateTimeOffset时,我没有时间。输出是:StartDate {23-05-2017 00:00:00 -04:00} –
是不是实际值,'23-05-2017 00:00:00 -04:00'?第二个'26-05-2017 23:59:00 -04:00'? –
是的,我将如何获得当地时间和日期。由于它是UTC。我需要将本地日期和时间的事件添加到设备日历 –
您可以在此Web API中使用Ticks
。当您使用多个时区时,这非常方便。参考下面的例子。
DateTime.UtcNow.Ticks
这不是Json的日期。 JSon日期根据ISO8601进行格式化。这是AJAX时代的一种非常古老的格式。一些*非常*旧的服务仍然使用它,虽然 –
此外,您使用DateTime可以是本地,UTC或未定义。返回日期的DateTimeKind属性是什么?如果在纽约将本地时间转换为相同的UTC时间,则它们的显示方式会有所不同,但它仍然是同一时间。如果您没有明确指定要使用什么DateTimeKind –
@PanagiotisKanavos - 我相信它*应该*使用ISO8601,但它没有任何要求:https:// stackoverflow。com/questions/10286204/the-right-json-date-format – CodeNaked