2016-07-15 103 views
0

为什么在将json字符串转换为Jobject时,datetime + offset会转换为localtime + offset。json字符串中的日期时间正在转换为本地时间

这是代码。

string dataValue = @"{""Time"":""2016-07-15T20:03:41+08:00""}"; 
JObject json = JObject.Parse(dataValue); 
Console.Write(json.ToString()); 

输出:

{ 
    "Time": "2016-07-15T17:33:41+05:30" 
} 

预期输出:

{ 
    "Time": "2016-07-15T20:03:41+08:00" 
} 
+0

哪个json解析器? Newtonsoft? – Neil

+0

是的,它的newtonsoft – KhanS

回答

3

默认情况下,将使用本地时间,但可以覆盖默认设置:

var dataValue = @"{""Time"":""2016-07-15T20:03:41+08:00""}"; 

var jsonSerializerSettings = new JsonSerializerSettings 
{ 
    DateTimeZoneHandling = DateTimeZoneHandling.Utc 
}; 

var json = JsonConvert.DeserializeObject<JObject>(dataValue, jsonSerializerSettings); 

如果你不在乎日期被转换为日期时间类型,你可以告诉Json.NET只是忽略日期和解析值作为字符串

var dataValue = @"{""Time"":""2016-07-15T20:03:41+08:00""}"; 

var jsonSerializerSettings = new JsonSerializerSettings 
{ 
    DateParseHandling = DateParseHandling.None 
}; 

var json = JsonConvert.DeserializeObject<JObject>(dataValue, jsonSerializerSettings) 

在这样的方式,将保持完全作为输入。

+0

这个转换为utc并删除偏移量(“Time”:“2016-07-15T12:03:41Z”),我想保留原来的时区和偏移量 – KhanS

+0

文字“Z”是ISO 8601 UTC时间的日期时间标准,如果你想要偏移量,你可以改变'JsonSerializerSettings'的格式属性。 –

+0

设置DateParseHandling = DateParseHandling.None为我工作 – KhanS

相关问题