簡體   English   中英

JSON如何反序列化日期時間並將其從UTC轉換為指定的時區?

[英]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 ,則偏移量將保持不變,並且值將不會更改(如果傳遞偏移量,則是更好的方法)。

獲得DateTimeDateTimeOffset值后,如有必要,請使用TimeZoneInfo.ConvertTime和類似方法更改時區。 這部分應該在您的應用程序代碼中,因為它傾向於特定於特定API的邏輯。

一般而言,嘗試通過序列化或其他某種方式將所有傳入或傳出日期/時間數據都視為在同一時區是一種反模式( 違反SRP )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM