一尘不染

比较两个java.util.Date以查看它们是否在同一天

java

我需要比较两个Dates(例如date1date2),并得出在同一天boolean sameDay两个Dates相同的true,如果不是,则返回false。

我怎样才能做到这一点?这里似乎有混乱的旋风……而且我想尽可能避免引入除JDK之外的其他依赖项。

需要说明的是:如果date1并且date2共享相同的年,月和日,sameDay则为true,否则为false。我意识到这需要了解时区…传入时区会很好,但是只要我知道行为是什么,我就可以使用GMT或本地时间。

再次澄清:

date1 = 2008 Jun 03 12:56:03
date2 = 2008 Jun 03 12:59:44
  => sameDate = true

date1 = 2009 Jun 03 12:56:03
date2 = 2008 Jun 03 12:59:44
  => sameDate = false

date1 = 2008 Aug 03 12:00:00
date2 = 2008 Jun 03 12:00:00
  => sameDate = false

阅读 603

收藏
2020-03-18

共1个答案

一尘不染

Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.setTime(date1);
cal2.setTime(date2);
boolean sameDay = cal1.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR) &&
                  cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR);

请注意,“同一天”并不是一个简单的概念,而是涉及不同时区时听起来很简单。上面的代码将针对两个日期计算相对于其所运行的计算机所使用的时区的日期。如果这不是你所需要的,则在Calendar.getInstance()确定“同一天”的确切含义之后,你必须将相关的时区传递给呼叫。

是的,Joda Time LocalDate可以使整个过程变得更加整洁和轻松(尽管也会存在涉及时区的同样困难)。

2020-03-18