我需要比较两个Date(例如date1date2),并得出一个boolean sameDay,这对两个Date共享同一天为true,否则为false。

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

进行说明:如果date1date2共享相同的年,月和日,则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

最佳答案

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将使整个过程变得更加整洁和容易(尽管也会遇到涉及时区的同样困难)。

关于java - 比较两个java.util.Date以查看它们是否在同一天,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2517709/

10-09 19:48