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

时间:2013-07-05 23:36:03

标签: java 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();
    }

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

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

由于

5 个答案:

答案 0 :(得分:8)

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

dateTime.dayOfMonth().roundFloorCopy()

完全符合您的需要。

答案 1 :(得分:6)

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

答案 2 :(得分:4)

  

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

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

IMO,可能没有必要改变它。

  

你知道其他任何方法吗?

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

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

  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(或其他)更有效。代码有点模糊,但对于具有合理数学技能的人来说应该显而易见。

答案 3 :(得分:2)

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

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

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

您可以使用以下代码 -

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

答案 4 :(得分:0)

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

    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));

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