如何从Date 中删除毫秒,秒,分钟和小时

我遇到了一个问题,我想比较两个日期。 但是,我只想比较年,月和日。 这就是我能做到的:

private Date trim(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.MILLISECOND, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.HOUR, 0); return calendar.getTime(); } 

我使用此function来修剪所有单位,但天,月和年。

现在,问题是你怎么看待它? 你知道其他任何方法吗?

谢谢

你真的需要使用java.util.Date吗? 如果你可以切换到joda时间 ,你会发现非常好的function,如:

 dateTime.dayOfMonth().roundFloorCopy() 

这正是你所需要的。

您的代码有效且易于阅读。 我没有看到任何改变它的问题或原因。

现在,问题是你做了什么呢?

它看起来简单明了。 您正在创建一个新的Date和一个临时的Calendar对象,但这只是一个小的开销。 (…除非您使用它来排序/订购大型数据结构……)

国际海事组织,可能没有必要改变它。

你知道其他任何方法吗?

  1. 开发/使用仅使用您感兴趣的字段的Comparator ,使用Calendar来提取它们。

    这是否有帮助取决于您目前如何进行比较。 比较器可能更整洁。 但另一方面,您最终可能会反复进行转换,而Comparator并未为您提供缓存转换日期的任何余地。

  2. 使用Date.getTime()返回的值进行计算。 大概是这样的:

     long val = date.getTime(); // milliseconds since 'epoch' in UTC val = val + /* local timezone offset in milliseconds */ long day = val / (1000 * 60 * 60 * 24); // days since "local" epoch. // repeat for other Date, and compare the 'day' numbers as integers 

    解释,做一些简单的算术比使用Calendar (或其他)更有效。 代码有点模糊,但对于具有合理数学技能的人来说应该是显而易见的。

我假设您要比较两个日期,您只想比较yearmonthday

你所做的很好,即删除hourminutesecondmillisecond 。 您必须同时使用这两个日期。

修剪完成后,您必须使用Date类中的compareTo方法。

您可以使用以下代码 –

 if(date1.compareTo(date2) < 0) { // date1 is earlier } else if(date1.compareTo(date2) > 0) { // date 2 is earlier } else { // both dates are equal } 

你可以试试这个,因为日期的格式保持不变:

  String first = date1.toString().substring(4,10) + " " + date.toString().substring(24, 28); String second = date2.toString().substring(4,10) + " " + date.toString().substring(24, 28); 

哪个会输出

1969年12月31日

1969年1月6日

然后比较结果。

 return (first.equals(second)); 

我不知道它是否比你的想法更好,但你得到的结果相同。