我遇到了一个问题,我想比较两个日期。但是,我只想比较年,月和日。这就是我能做到的:
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();
}
我使用此功能来修剪所有单位,但天,月和年。
现在,问题是你怎么看待它? 你知道其他任何方式吗?
由于
答案 0 :(得分:8)
你真的需要使用java.util.Date
吗?如果你可以切换到joda time,你会发现非常好的功能,如:
dateTime.dayOfMonth().roundFloorCopy()
完全符合您的需要。
答案 1 :(得分:6)
您的代码有效且易于阅读。我没有看到任何改变它的问题或原因。
答案 2 :(得分:4)
现在,问题是你做了什么呢?
看起来简单明了。您正在创建一个新的Date
和一个临时的Calendar
对象,但这只是一个小的开销。 (...除非您使用它来排序/订购大型数据结构......)
IMO,可能没有必要改变它。
你知道其他任何方法吗?
开发/使用只使用您感兴趣的字段的Comparator<Date>
,使用Calendar
来提取它们。
这是否有用取决于您目前如何进行比较。比较器可能更整洁。但另一方面,您可能最终重复进行转换,而Comparator<Date>
并未为您提供缓存转换日期的任何余地。
使用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)
我假设您要比较两个日期,您只想比较year
,month
和day
。
您所做的很好,即删除hour
,minute
,second
和millisecond
。您必须同时使用这两个日期。
修剪完成后,您必须使用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));
我不知道它是否比你的想法更好,但你会得到相同的结果。