NodaTime,我们应该使用 LocalDateTime 来预订时间吗?

NodaTime, should we use LocalDateTime for booking times?

我们开发并维护了一个已在丹麦使用多年的预订系统。

然而,我们现在正在将我们的覆盖范围扩展到一个时区以外的国家,一些客户将拥有一个跨越多个时区的系统。 所以我们天真的 DateTime 方法将来肯定会给我们带来问题。 我喜欢 NodaTime 方法,它针对特定目的使用特定的 class 这应该使我们的开发人员的学习曲线更容易。

但是,我们保存的其中一件事是特定餐厅的特定预订的到达时间。 对我来说,这听起来像是我会使用 LocalDateTime 的情况,这确保即使是坐在不同时区的计算机前的经理仍然会看到正确的到达时间(相对于餐厅时区的时间,而我们不必考虑时区) 因为没有使用时区。

如果在某些时候我们想在用户本地的不同时区显示这些时间(目前对我来说这没有意义),我们可以通过使用餐厅的时区来实现,然后计算相对时间。

正确的class使用的是 LocalDateTime,在 SQLServer 中保存为日期时间吗?

是否有任何论据可以让我们考虑将 ZonedDateTime 用于此类用例?

如果您总是知道与预订的当地 date/time 关联的时区,那基本上没问题。大概时区与预订的餐厅有关。

您可能 运行 遇到的一个问题是 LocalDateTimeDateTimeZone 对并不总是 明确地 确定一个瞬间时间。例如,如果您的餐厅营业至深夜,并且您从夏令时转到冬令时凌晨 2 点(变为凌晨 1 点),那么凌晨 1.15 的预订实际上可能会晚于凌晨 1.45 的预订。这就是为什么 ZonedDateTime 包含一个 LocalDateTime、一个 DateTimeZone 引用和一个 Offset 来解决歧义。

此外,仅使用 LocalDateTime 可能会使执行某些查询变得更加棘手 - 如果您想按照实际发生的顺序进行预订,则需要将它们解析为 ZonedDateTime值。但也许您根本不需要这些查询。

基本上,您应该能够为任何预订提供 LocalDateTimeDateTimeZone - 并考虑如何解决歧义(或跳过时间,从冬季到夏季)。如果您有 information/policy,那很好。