Java比较了两个日期,每月和一天



我有一种比较两个日期的方法,以查看事务范围是否在有效From和vallyuntil之间,有效From和vallunti具有类似于" 2017-01-01-01-01 001 00:00:00"的值,但是由于转换为不同的时区,交易日期有时会带有不同的小时。

public boolean isDateWithinEmploymentDeploymentValidityPeriod(Date transcationDate, Parameter parameter) {
    return transcationDate.compareTo(parameter.getValidFrom()) >= 0
            && (parameter.getValidUntil() == null || transcationDate.compareTo(parameter.getValidUntil()) <= 0);
}

因此,我需要比较仅仅比较年份和一天的时间,并且不考虑时间,如果不将日期转换为Gregoriancalendar和Geting Years和Day的每月和一天,这将是最有效的方法?

如果您使用的是Java&lt;8,不幸的是,不会有简单的答案(即,您必须在问题中所说的那样使用Calendar,或者可能依靠像Joda Time这样的第三方库)。

希望您使用Java 8,因此我们可以利用java.time软件包的优点。由于您只想比较日期(不是时间),并且不在乎时区,因此您要使用的是java.time.LocalDate

// Ideally, instances of the java.time classes are used throughout
// the application making this method useless.
private LocalDate toLocalDate(Date date) {
    return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()).toLocalDate();
}
public boolean inRange(Date date, Date from, Date until) {
    return inRange(toLocalDate(date), toLocalDate(from), toLocalDate(until));
}
public boolean inRange(LocalDate date, LocalDate from, LocalDate until) {
    return !date.isBefore(from) && !date.isAfter(until);
}

LocalDate

我认为简单的解决方案是转换为LocalDate

LocalDate validFrom = LocalDate.parse("2017-01-01 00:00:00", DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss"));

LocalDate类接受包括小时,分钟和秒的模式,它忽略了字符串中的这些值。

使用validUntil和交易日期做同样的事情。使用isBefore()isAfter()isEqual()compareTo()比较结果LocalDate实例。

您可以使用日历并将其他参数设置为年度,月和日至0。

Calendar transactionCalendar= Calendar.getInstance();
Date transactionDate = ...;
transactionCalendar.setTime(transactionDate );
transactionCalendar.set(Calendar.HOUR_OF_DAY, 0);
transactionCalendar.set(Calendar.MINUTE, 0);
transactionCalendar.set(Calendar.SECOND, 0);
transactionCalendar.set(Calendar.MILLISECOND, 0);

相关内容

  • 没有找到相关文章

最新更新