【问题标题】:How to store a ValidTo date-only DateTime如何存储 ValidTo 仅限日期的 DateTime
【发布时间】: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 本身中使用的内容几乎没有关系,这将是“您的应用程序中最方便的内容”,如果您愿意,包括但不限于自定义仅日期类型。
  • 您的部分问题是您同时谈论存储值(在某些数据库中?)和“接口的消费者”。内部存储与表示格式分开,与允许的输入格式分开。您的业​​务层应该在每个方面的定义/允许格式之间进行转换。当然你可以将接受的输入格式定义为与你的演示格式完全相同,但至少数据库存储格式应该分开处理。

标签: c# .net datetime


【解决方案1】:

感谢大家的意见。我们将一些非常好的和有效的观点结合到我们的以下解决方案中:

  • 存储没有时间信息
  • 命名为“ValidToDate”以传输它是一个日期并且没有时间的信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-14
    • 2013-01-18
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    相关资源
    最近更新 更多