2016-07-15 2 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パーサーですか?ニュートンソフト? – 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); 

あなたが気にしないそれは正確にご入力として滞在するように

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

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

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

:日付がのDateTime型に変換されて、あなただけの日付を無視し文字列として値を解析するJson.NETを伝えることができます。

+0

これはutcに変換してオフセットを削除します( "Time": "2016-07-15T12:03:41Z")、元のタイムゾーンとオフセットを保持します – KhanS

+0

リテラル "Z"はISO UTC時刻の日付時刻の標準である8601をオフセットしたい場合は、 'JsonSerializerSettings'の書式プロパティを変更できます。 –

+0

設定DateParseHandling = DateParseHandling.Noneは私のために働いた – KhanS

関連する問題