[英]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.