【问题标题】:How to create 2 java (min and max Date) that spans the entire month exactly [duplicate]如何创建2个跨越整个月的java(最小和最大日期)[重复]
【发布时间】:2020-10-28 20:04:45
【问题描述】:

在 Java 上,我愿意

Date minDate = new Date(year,month,1);
Date maxDate = new Date(year,month,31); 

过滤从第 1 天到第 31 天的订单。但是对于某些月份(有 30 天)和更少的 2 月,这最终会找到下个月第 1、2 天甚至第 3 天的订单。

我怎样才能创建一个准确跨越整个月的minDate 和maxDate?

这些数据值是由另一端的 mongodb 读取的,但如果可能的话,我想在 java 端这样做。

【问题讨论】:

  • 使用java.time API 很容易解决这个问题。你有什么理由不使用它?
  • 你在使用java.util.Date吗?使用java.time.LocalDate 或 Joda Time,您可能会更轻松。
  • (1) 不要使用Date。该课程设计不良且早已过时。使用 java.time。 (2) 选择时区。在所有时区,月份既不是在同一时间点结束也不是在同一时间点开始。 (3) 使用半开:将月份表示为从本月第一刻到下个月第一刻不包含的区间。

标签: java mongodb


【解决方案1】:

java.util.Date 已被弃用,并且有充分的理由。在我本地的 Scala REPL 上:

scala> import java.util.Date
import java.util.Date

scala> new Date(120, 9, 1, 0, 0)
       ^
       warning: constructor Date in class Date is deprecated: see corresponding Javadoc 
for more information.
res3: java.util.Date = Thu Oct 01 00:00:00 EDT 2020

scala> new Date(120, 9, 31, 23, 59)
       ^
       warning: constructor Date in class Date is deprecated: see corresponding Javadoc 
for more information.
res4: java.util.Date = Sat Oct 31 23:59:00 EDT 2020

如果你有 JShell,你应该会看到类似的东西。

好的,所以不是整个Date 类都被弃用了,但几乎所有的构造函数和它的几个getter 和setter 都被弃用了。也许java.time.LocalDate 会更适合你。

scala> import java.time.LocalDate
import java.time.LocalDate

scala> LocalDate.of(2020, 10, 1)
res5: java.time.LocalDate = 2020-10-01

scala> LocalDate.of(2020, 10, 31)
res6: java.time.LocalDate = 2020-10-31

看,不需要从年份中减去 1900。轻松、轻松、美丽。

【讨论】:

  • 确实很漂亮!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
  • 1970-01-01
  • 2019-06-02
  • 2021-01-10
  • 1970-01-01
相关资源
最近更新 更多