[英]How JSON deserialize datetime and convert from UTC to a specified time zone?
我想創建一個自定義json序列化程序,它將帶有dateTime的對象與UTC進行相互轉換,並返回給指定的時區。 (非本地)
轉換為UTC的示例是:
MyObject stuff = new MyObject();
stuff.Date = DateTime.Now;
string asdd = JsonConvert.SerializeObject(stuff,
new JsonSerializerSettings()
{
DateTimeZoneHandling = DateTimeZoneHandling.Utc
});
如何通過JsonSerializerSettings或自定義序列化程序從UTC轉換回特定的時區?
注意:我正在.NET Core 2.1中工作。
序列化或反序列化時不應處理時區轉換。 這些是單獨的關注點。
代替:
將DateTimeZoneHandling
保留為默認值RoundtripKind
。 (不要將其設置為Utc
。)這具有以下行為:
DateTime
,並且在數據中不傳遞偏移量,則將設置DateTimeKind.Unspecified
。 DateTime
,並在數據中傳遞尾隨Z
,則將設置DateTimeKind.Utc
。 DateTime
,並在數據中傳遞偏移量,則將設置`DateTimeKind.Local,並且該值將轉換為本地時區(通常應避免這種情況)。 DateTimeOffset
,則偏移量將保持不變,並且值將不會更改(如果傳遞偏移量,則是更好的方法)。 獲得DateTime
或DateTimeOffset
值后,如有必要,請使用TimeZoneInfo.ConvertTime
和類似方法更改時區。 這部分應該在您的應用程序代碼中,因為它傾向於特定於特定API的邏輯。
一般而言,嘗試通過序列化或其他某種方式將所有傳入或傳出日期/時間數據都視為在同一時區是一種反模式( 違反SRP )。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.