我已经构建了自定义数据网格,并添加了一些过滤器。 我有一个过滤器是日期过滤器,用于显示日期的单元格。 我的问题是细胞可能会显示
Displayed date value : 21/01/2014 , Actual date object value : 21-01-2014 16:32:0000
当然用户不知道小时部分,所以当他/她提供同一天,月和年的过滤值时,期望看到匹配的元素。这当然不会发生,因为比较器比较具有不同小时值的日期对象。
我想问的是,根据显示格式,是否有比较两个日期对象的首选方法?我可以实现这个逻辑,我只是好奇一些实现已经存在。
更新
我有两个日期对象:
和显示格式:“dd / MM / yyyy”
是否有一种根据格式组合这两个日期的首选方法? 这意味着只比较格式中包含的日期部分。 在上述情况下,仅比较日(dd),月(MM),年(yyyy)。
我在重复我自己可以实现一些简单的事情,我只是好奇其他人之前是否遇到过此问题并找到了一个通用解决方案。
答案 0 :(得分:1)
在比较之前,以这种方式修改date
:
GregorianCalendar gc = new GregorianCalendar();
gc.setTime(date);
gc.set(GregorianCalendar.HOUR_OF_DAY, 0);
gc.set(GregorianCalendar.SECOND, 0);
gc.set(GregorianCalendar.MINUTE, 0);
gc.set(GregorianCalendar.MILLISECOND, 0);
date = gc.getTime();
它会将它修剪为当天的值,因此您可以比较它们相同的两个日期,但由于您已将它们修剪为日期值,因此无论前几个小时如何,这些日期都将返回true,分,秒和毫秒值。
或者你可以这样做:
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date date1 = ...;
Date date2 = ...;
if (sdf.format(date1).equals(sdf.format(date2))) {
// dates are equal in the day value
}
答案 1 :(得分:1)
如果您正在客户端寻找解决方案(GWT编译器将Java代码编译为Javascript),Krzysztof's解决方案将无效。客户端GWT does not support Calendar
and related classes。 {}不支持SimpleDateFormat
- DateTimeFormat
has to be used instead。
然而,GWT中有一个有用的实用程序类:CalendarUtil
。它有isSameDate(java.util.Date date0, java.util.Date date1)
方法,可以完全按照您的要求执行:
检查两个日期是否代表同一年的相同日期,即使它们的时间不同。
BTW,它还有一个resetTime(java.util.Date date)
方法,可能对您的用例有用:
将日期重置为没有时间修饰符。
答案 2 :(得分:1)
使用LocalDate
进行Java中的任何日期/时间处理。阅读 this 帖子,了解为什么使用LocalDate
优于其他较旧选项的优势。
话虽如此,您需要做的就是以您所请求的格式(dd / MM / yyyy)比较您的Date
(s):
让date1
和date2
成为您输入日期的Date
个对象。
LocalDate lD1 = new LocalDate(date1);
LocalDate lD2 = new LocalDate(date2);
String comparisonFormat = "dd/MM/yyyy";
boolean result = lD1.toString(comparisonFormat).equals(lD2.toString(comparisonFormat));
如果这是你的话,你可以用单行代码完成这项任务,但我认为这种方式更具可读性。