虽然根据java.util.Date的日期组件部分给出的答案在很多部分都是足够的,但我要强调的是,java.util.Date不是日期,而是一种以毫秒为单位测量的UNIX时间戳.那是什么后果?
日期时间戳的仅日期比较将取决于上下文的时区.例如,在UTC时区中,仅日期比较是直接的,最后只比较年,月和日组件,请参阅其他答案(我不需要重复).
但请考虑一下2011年西萨摩亚跨越国际日期的情况.您可以拥有类型为java.util.Date的有效时间戳,但如果您在萨摩亚考虑他们的日期部分,您甚至可以获得无效日期(2011-12- 30萨摩亚当地从未存在过)因此只比较日期部分可能会失败.此外,根据时区,日期组件通常可以与UTC区域中的本地日期相差一天,提前或后退,在最坏的情况下甚至有两天的差异.
因此,对解决方案的扩展稍微更精确:
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
fmt.setTimeZone(...); // your time zone
return fmt.format(date1).equals(fmt.format(date2));
对于首先将j.u.Date-timestamp转换为java.util.GregorianCalendar,然后设置时区然后比较日期组件的程序化方法,也存在类似的扩展.