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

2022-08-31 05:23:34

我需要比较两个s(例如 和)并提出一个两个s在同一天共享的真,如果它们不是,则为假。Datedate1date2boolean sameDayDate

我该怎么做?这里似乎有一阵混乱的旋风...如果可能的话,我想避免在JDK之外拉入其他依赖项。

澄清:如果和共享相同的年,月,日,那么是真的,否则它是假的。我意识到这需要了解时区...在一个时区通过会很好,但只要我知道行为是什么,我就可以忍受GMT或当地时间。date1date2sameDay

再次澄清:

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

答案 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's将使整个事情变得更加干净和容易(尽管存在涉及时区的相同困难)。LocalDate


答案 2

怎么样:

SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
return fmt.format(date1).equals(fmt.format(date2));

如果需要,您还可以将时区设置为 SimpleDateFormat。