【发布时间】:2021-07-25 15:59:03
【问题描述】:
我们今天就存储DateTime ValidTo 值的最佳方式进行了充分讨论。 该值表示带有日期选择器的 UI 上的一天。
例如用户选择今天 (03.05.2021)。我们讨论了几个选项:
- 有效期至 2021-05-03T00:00:00.000Z (z = UTC)
- 因为日期没有时间
- 有效期至 2021-05-03T23:59:99.999Z
- 因为应该包括 03.05.2021 的任何时间
- 有效期至 2021-05-04T00:00:00.000Z
- 因为边界清晰
我更喜欢第一个想法,因为对我来说约会没有时间,但是界面的消费者如何阅读这个?您总是需要知道这个 DateTime 必须被解释和验证为日期而不是时间点。很难传输这些信息。
另一方面:您将如何存储不属于从有效到时间跨度的日期。例如CreatedOn。如果只是一天,就没有任何时间信息,对吧?
是命名问题吗?
有什么最佳做法吗?你是怎么处理的?
【问题讨论】:
-
NodaTime 可能是您想要的。
-
不,不确定。在某些时候,我需要通过某些接口(graphql、json、...)发送这些数据。所以又到了iso时间,对吧?
-
@mjwills 我怀疑 NodaTime 在这种情况下会有所帮助。如果值是整数,这是同一个问题。问题是您是在进行小于比较还是小于或等于比较。
-
外部系统通常只支持日期——
2021-05-03(ISO 日期)将是明显的序列化选择(或者2021-05-04,如果边界是独占的)。这与您在 .NET 本身中使用的内容几乎没有关系,这将是“您的应用程序中最方便的内容”,如果您愿意,包括但不限于自定义仅日期类型。 -
您的部分问题是您同时谈论存储值(在某些数据库中?)和“接口的消费者”。内部存储与表示格式分开,与允许的输入格式分开。您的业务层应该在每个方面的定义/允许格式之间进行转换。当然你可以将接受的输入格式定义为与你的演示格式完全相同,但至少数据库存储格式应该分开处理。