2016-11-16 123 views
0

我试图将从API调用接收到的此日期时间 - /Date(1445828400000-0400)/转换为更具可读性的内容。将JSON日期时间转换为

我正在使用的API工具的UI显示8:00 PM。服务器位于美国东部时区,我知道它意味着当地时间价值。目前夏令时在美国生效。

我需要将我从API获得的值转换为美国的EST(或者我猜EDS)时间里的人类可读的日期时间,以确保我从API获得的值与UI中的相同。我的电脑在UTC + 2时区。

搜索示例中,我得到了以下内容:

string s = @"""/Date(1445828400000-0400)/"""; 
DateTimeOffset dto = JsonConvert.DeserializeObject<DateTimeOffset>(s); 
DateTime utc = dto.UtcDateTime; 
var NYTZ = TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time"); 
var ny_time = TimeZoneInfo.ConvertTimeFromUtc(utc, NYTZ); 
Console.WriteLine(ny_time); 

这给了我10/25/2015 11:00:00 PM - 日期是正确的,但时间是隔靴搔痒什么,我希望它是。

什么是将时间格式转换为可读性的正确方法?

+0

修复您的API,因为它正在生成不兼容的日期。 JSON日期使用ISO8601格式,即'2015-10-25T23:00:00 + 5:00' –

+0

什么生成日期?它对我来说看起来是无效的,而不是一个标准的Javascript日期对象,'-'是错误的 – Liam

+0

但是...如果json时间是EST,为什么要将它转换为UTC然后将其转换回EST? – Will

回答

1

Json.NET默认使用ISO8601日期格式。要使用旧的Microsoft格式(本质上是一个逃脱Unix时间戳),您需要更改

var microsoftDateFormatSettings = new JsonSerializerSettings 
{ 
    DateFormatHandling = DateFormatHandling.MicrosoftDateFormat 
}; 
var date = JsonConvert.DeserializeObject<DateTimeOffset>(text, microsoftDateFormatSettings); 

的各种设置在Serializing Dates in JSON描述。