C#:无法将正确的日期和时间解析为当前系统时区
C# : Could not parse the correct date and time to the current system time zone
我有一个 returns json
这样的服务 :
[
{
"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#反序列化代码
我正在使用 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 09:29:00
GMT-4:00(纽约):
开始时间:23-05-2017 00:00:00
结束时间:26-05-2017 23:59:00
因此,当我切换到 GMT-4:00(纽约)时,对于每条记录,开始时间都不会解析为相应的系统时区。
我在这里缺少什么?
Json.NET 允许您通过 DateTimeZoneHandling 序列化程序设置指定哪种 DateTime 到 return(UTC,本地)。默认为本地。
要 return 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。此类型保留原始偏移量。
您可以在 Web API 中使用 Ticks
。当您使用多个时区时,这会非常方便。参考下面的例子。
DateTime.UtcNow.Ticks
我有一个 returns json
这样的服务 :
[
{
"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#反序列化代码
我正在使用 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 09:29:00
GMT-4:00(纽约):
开始时间:23-05-2017 00:00:00
结束时间:26-05-2017 23:59:00
因此,当我切换到 GMT-4:00(纽约)时,对于每条记录,开始时间都不会解析为相应的系统时区。 我在这里缺少什么?
Json.NET 允许您通过 DateTimeZoneHandling 序列化程序设置指定哪种 DateTime 到 return(UTC,本地)。默认为本地。
要 return 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。此类型保留原始偏移量。
您可以在 Web API 中使用 Ticks
。当您使用多个时区时,这会非常方便。参考下面的例子。
DateTime.UtcNow.Ticks