gpt4 book ai didi

java - 你如何存储日期范围,它们实际上是时间戳

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:06:45 24 4
gpt4 key购买 nike

Java 和 Oracle 都有一个名为 Date 的时间戳类型。开发人员倾向于将它们当作日历日期来操作,我曾看到这会导致严重的一次性错误。

  1. 对于基本日期数量,您可以简单地在输入时砍掉时间部分,即降低精度。但是,如果您使用日期范围(例如:9/29-9/30)执行此操作,则这两个值之间的差异是 1 天,而不是 2 天。此外,范围比较需要 1 ) 截断操作:start < trunc(now) <= end , 或 2) 算术:start < now < (end + 24hrs) .不可怕,但不是DRY .

  2. 另一种方法是使用真实时间戳:9/29 00:00:00 - 10/1 00:00:00。 (从午夜到午夜,因此不包括 10 月的任何部分)。现在持续时间本质上是正确的,范围比较更简单:start <= now < end .对于内部处理来说当然更清晰,但是结束日期确实需要根据初始输入 (+1) 进行转换,对于输出 (-1),假定用户级别的日历日期隐喻。

您如何处理项目的日期范围?还有其他选择吗?我对您如何在等式的 Java 和 Oracle 端处理此问题特别感兴趣。

最佳答案

这是我们的做法。

  1. 使用时间戳。

  2. 使用半开区间进行比较:start <= now < end .

忽略那些坚持认为 BETWEEN 在某种程度上对成功的 SQL 至关重要的提示者。

有了这个一系列的日期范围就很容易审计了。 9/30 to 10/1 的数据库值包含一天 (9/30)。下一个间隔的开始必须等于前一个间隔的结束。那interval[n-1].end == interval[n].start规则便于审核。

显示的时候,如果需要,可以显示格式化的startend -1。事实证明,您可以教育人们了解“结束”实际上是规则不再适用的第一天。所以“9/30 到 10/1”的意思是“从 9 月 30 日开始有效,从 10 月 1 日开始不再有效”。

关于java - 你如何存储日期范围,它们实际上是时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/156032/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com