根据格式比较日期



我已经构建了一个自定义数据网格,并添加了一些过滤器。我有一个过滤器是日期过滤器,用于显示日期的单元格。我的问题是单元格可能显示

Displayed date value : 21/01/2014 , Actual date object value : 21-01-2014 16:32:0000

当然,用户不知道小时部分,所以当他/她提供相同的日、月、年的过滤值时,希望看到匹配的元素。这当然不会发生,因为比较器比较具有不同小时值的日期对象。

我想问的是,是否有一种根据显示格式比较两个日期对象的首选方法?我可以实现这个逻辑,我只是好奇是否已经存在一些实现。

更新

我有两个日期对象:

  1. 21-01-2014 16:32:0000
  2. 21-01-2014 00:00:0000

和显示格式:"dd/MM/yyyy"

根据格式是否有组合这两个日期的首选方法?这意味着只比较包含在格式中的日期部分。在上面的例子中,只比较日(dd)、月(MM)、年(yyyy)。

我重复一下,我可以自己实现一些简单的东西,我只是好奇是否有人遇到过这个问题,并找到了一个通用的解决方案。

如果您正在客户端寻找解决方案(Java代码由GWT编译器编译为Javascript), Krzysztof的解决方案将不起作用。GWT在客户端不支持Calendar和相关类。也不支持SimpleDateFormat,必须使用DateTimeFormat

但是在GWT: CalendarUtil中有一个有用的实用程序类。它有一个isSameDate(java.util.Date date0, java.util.Date date1)方法,这正是你想要的:

检查两个日期是否代表同一年的同一天,即使它们有不同的时间。

顺便说一句,它还有一个resetTime(java.util.Date date)方法,在你的用例中可能很有用:

将日期重置为没有时间修饰符。

在比较之前,以这种方式修改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
    }

在Java中使用LocalDate处理任何日期/时间。阅读这个帖子,了解为什么使用LocalDate比其他旧选项更有利。

话虽如此,你所需要做的就是比较你的Date (s)在你要求的格式(dd/MM/yyyy)是:

date1date2为具有您输入日期的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));

如果你喜欢的话,你可以用一行代码来完成,但是我认为这样更容易读懂。

相关内容

  • 没有找到相关文章

最新更新