【问题标题】:NodaTime, should we use LocalDateTime for booking times?NodaTime,我们应该使用 LocalDateTime 作为预订时间吗?
【发布时间】:2016-04-10 09:14:08
【问题描述】:

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

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

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

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

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

对于这样的用例,是否有任何参数可以让我们考虑 ZonedDateTime?

【问题讨论】:

    标签: c# date datetime nodatime


    【解决方案1】:

    如果您始终知道与预订的当地日期/时间相关联的时区,那基本没问题。大概时区与预订的餐厅有关。

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

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

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

    【讨论】:

    • 完美。谢谢乔恩,我知道夏令时的潜在问题。然而,我们的在线预订系统或 UI 都没有处理这个问题。我们通常不会在晚上进行预订,即使我们有预订,对于降低复杂性而言,这仍然是一个可以接受的折衷方案。
    猜你喜欢
    • 2014-04-09
    • 2019-10-25
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 2023-04-04
    • 2011-02-23
    相关资源
    最近更新 更多