NodaTime:即时到 ZonedDateTime 没有偏移时间
NodaTime: Instant to ZonedDateTime without skewing time
我有一个日期时间存储在我们的后端系统中,例如 2019-11-27T00:00:00
。
我现在想使用该数据,它代表日期和时间,与时区无关,作为发送给外部用户的 JSON 文档的一部分。
我目前正在使用 Noda Time 类型 Instant
来表示上述值。
InstantPattern.CreateWithInvariantCulture("yyyy-MM-ddTHH:mm:ss").Parse("2019-11-27T00:00:00").Value;
当我以后想在JSON文档中输出时间时,我想将它转换为也可以表示当前对象时区的类型。时区已知。
举个例子,上面的值在文档中应该这样表示:
瑞典:2019-11-27T00:00:00+01:00
芬兰:2019-11-27T00:00:00+02:00
我之所以要这样做是因为数据库中的日期和时间代表当前数据消费者在本地时间发生事件的时间。一个示例是 "Black Friday" 销售从实际销售所在国家/地区的午夜开始,而不是从 UTC 或类似时间的午夜开始。通过在输出 JSON 中设置时区信息,我可以保证数据的消费者获得正确的信息。
我所有尝试使用 Instant 中的 ZonedDateTime 的尝试,Instant 都被视为 UTC 时间并且输出变得不正确。可能我遗漏了什么,但不幸的是我卡住了。
我的问题是:
- NodaTime 是正确的库吗?
- Instant 是数据库值的正确数据类型吗?
- ZonedDateTime 是正确的工作方式吗?
- 如何将 Instant 转换为可以包含时区信息的任何其他类型?
提前致谢。
根据上面一些大佬的评论,我已经通过
解决了我的问题
- 使用 Instant 作为数据库的类型以防止其他开发人员将其误认为是本地日期和时间
- 将 Instant 转换为 DateTime,然后及时应用
TimeZoneInfo.ConvertTimeBySystemTimeZoneId
以创建 JSON 输出。
我有一个日期时间存储在我们的后端系统中,例如 2019-11-27T00:00:00
。
我现在想使用该数据,它代表日期和时间,与时区无关,作为发送给外部用户的 JSON 文档的一部分。
我目前正在使用 Noda Time 类型 Instant
来表示上述值。
InstantPattern.CreateWithInvariantCulture("yyyy-MM-ddTHH:mm:ss").Parse("2019-11-27T00:00:00").Value;
当我以后想在JSON文档中输出时间时,我想将它转换为也可以表示当前对象时区的类型。时区已知。
举个例子,上面的值在文档中应该这样表示:
瑞典:2019-11-27T00:00:00+01:00
芬兰:2019-11-27T00:00:00+02:00
我之所以要这样做是因为数据库中的日期和时间代表当前数据消费者在本地时间发生事件的时间。一个示例是 "Black Friday" 销售从实际销售所在国家/地区的午夜开始,而不是从 UTC 或类似时间的午夜开始。通过在输出 JSON 中设置时区信息,我可以保证数据的消费者获得正确的信息。
我所有尝试使用 Instant 中的 ZonedDateTime 的尝试,Instant 都被视为 UTC 时间并且输出变得不正确。可能我遗漏了什么,但不幸的是我卡住了。
我的问题是:
- NodaTime 是正确的库吗?
- Instant 是数据库值的正确数据类型吗?
- ZonedDateTime 是正确的工作方式吗?
- 如何将 Instant 转换为可以包含时区信息的任何其他类型?
提前致谢。
根据上面一些大佬的评论,我已经通过
解决了我的问题- 使用 Instant 作为数据库的类型以防止其他开发人员将其误认为是本地日期和时间
- 将 Instant 转换为 DateTime,然后及时应用
TimeZoneInfo.ConvertTimeBySystemTimeZoneId
以创建 JSON 输出。