繁体   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