要解决的任务:
给出DateTimeOffset
,其值具有特定的偏移量。我想使用它所表示的确切形式来序列化它,并使用确切的日期和时间值以及精确相同的偏移值
问题
[当前,当序列化矩时是正确的,但是时间点的格式化序列化版本将转换为根据当前时区的偏移量。 (这样虽然时间点仍然正确,但是原始偏移信息丢失了)
示例
给出日期为:2019-07-26且时间为:00:00:00且偏移为:-05:00的DateTimeOffset
在系统中,当当前时区给出结果时,此特定日期和时间的偏移量为+01:00,DateTimeOffset将被序列化为:
2019-07-26T00:06:00 + 01:00
我想将其序列化为
2019-07-26T00:00:00-05:00
我知道这两个时间相等。我也确实知道时区和偏移量之间的区别,并且在措辞当当前时区给出结果时,这个特定的日期和时间具有偏移量+01:00
时要小心。在我们的持久性和业务记录中,不仅确切的时间点很重要,而且偏移量本身也具有意义。
我尝试过的事情:
我看到自动等式转换为当前时区的偏移量是在Utf8JsonWriter
中完成的,它不是为自定义或继承而设计的。我已经尝试实现自定义转换器,但是必须在其中注入自定义功能的级别要高得多。
public class DateTimeConverterUsingDateTimeParse : JsonConverter<DateTimeOffset>
{
public override void Write(Utf8JsonWriter writer, DateTimeOffset value, JsonSerializerOptions options)
{
// Based on the experience I've described in the OP, it is useless
// to anything with the `DateTimeOffset value` because regardless its Offset, Utf8JsonWriter will write it with the current timezone's offset for the date.
}
}
[System.Text.Json
支持本地时区或UTC的序列化。
您似乎确实知道这一点。
解决问题的其他方法是在时区之间转换。看到此链接:https://docs.microsoft.com/en-us/dotnet/standard/datetime/converting-between-time-zones#converting-between-any-two-time-zones