如何从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
对象,但这只是一个小的开销。 (…除非您使用它来排序/订购大型数据结构……)
国际海事组织,可能没有必要改变它。
你知道其他任何方法吗?
-
开发/使用仅使用您感兴趣的字段的
Comparator
,使用Calendar
来提取它们。这是否有帮助取决于您目前如何进行比较。 比较器可能更整洁。 但另一方面,您最终可能会反复进行转换,而
Comparator
并未为您提供缓存转换日期的任何余地。 -
使用
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
(或其他)更有效。 代码有点模糊,但对于具有合理数学技能的人来说应该是显而易见的。
我假设您要比较两个日期,您只想比较year
, month
和day
。
你所做的很好,即删除hour
, minute
, second
和millisecond
。 您必须同时使用这两个日期。
修剪完成后,您必须使用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));
我不知道它是否比你的想法更好,但你得到的结果相同。