【问题标题】:Nodatime How do I serialize ZonedDateTime to ISO-8601 format using System.Text.JsonNodatime 如何使用 System.Text.Json 将 ZonedDateTime 序列化为 ISO-8601 格式
【发布时间】:2020-06-26 23:07:20
【问题描述】:

有没有办法使用 System.Text.Json 将 ZonedDateTime 序列化为 ISO 8601 字符串?

我目前正在以不符合 ISO 8061 的 2020-03-15T15:14:53Z UTC 格式获取输出。

最终目标是将其输入 Moment.js 以进行进一步格式化

编辑:添加代码 sn-p,注意复杂,只需从 DateTimeOffset 创建 ZonedDateTime

//Incoming Date format "Mon Feb 10 16:46:03 +0000 2020"
var dto = DateTimeOffset.ParseExact(date, "ddd MMM dd HH:mm:ss K yyyy", CultureInfo.InvariantCulture.DateTimeFormat);
var zdt = dto.ToZonedDateTime();

【问题讨论】:

  • 你试过这个吗:DateTime.UtcNow.ToString("u").Replace(' ', 'T');?你能分享一个示例代码并给出你的场景的结果吗?

标签: json asp.net-core iso8601 nodatime zoneddatetime


【解决方案1】:

ISO-8601 没有任何时区表示 - 只有 UTC 偏移量。 (不幸的是,它将那些称为时区,但事实并非如此。)

如果您从DateTimeOffset 构造ZonedDateTime,我建议不要这样做,而是使用OffsetDateTime,它实际上代表了您拥有的信息。 (你也可以直接从初始值解析它,而不是通过DateTimeOffset。)

虽然我没有检查过,但我希望 OffsetDateTime JSON 表示是 ISO-8601 格式。

【讨论】:

  • 谢谢,你提到解析而不通过 DateTimeOffset,我只能看到通过 LocaDateTime 和一个看起来更复杂的 Offset 来做到这一点?我错过了什么吗?
  • @DavidHayes:也许你缺少OffsetDateTimePattern,这是解析OffsetDateTime 的自然方式?
猜你喜欢
  • 2018-07-24
  • 1970-01-01
  • 2021-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多