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

新手上路,请多包涵

I need to compare two Date s (eg date1 and date2 ) and come up with a boolean sameDay which is true of the two Date s 在同一天共享,如果不是,则为 false。

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

澄清一下: 如果 date1date2 具有相同的年月日,则 sameDay 为真,否则为假我意识到这需要时区知识……传递时区会很好,但只要我知道行为是什么,我就可以接受格林威治标准时间或当地时间。

再次澄清:

 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

原文由 Jason S 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 342
2 个回答
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 将使整个事情变得更加清晰和容易(尽管会出现涉及时区的相同困难)。

原文由 Michael Borgwardt 发布,翻译遵循 CC BY-SA 4.0 许可协议

怎么样:

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

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

原文由 Binil Thomas 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题