11.6 比较两个java.util.Date以查看它们是否在同一天 | Java Debug 笔记

319 阅读1分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>

我需要比较两个日期(例如date1和date2),并得出一个boolean sameDay,这对两个共享同一天的日期为true,否则为false。

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

需要说明的是:如果date1和date2共享相同的年,月和日,则sameDay为true,否则为false。 我意识到这需要了解时区...

举个栗子


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的LocalDate可以使整个过程变得更加整洁和轻松(尽管也会遇到涉及时区的相同困难)。

本文翻译至Stack OverFlow:stackoverflow.com/questions/2…