【发布时间】:2017-07-15 01:06:01
【问题描述】:
我有一种方法可以比较两个日期,以查看 transactionDate 是否在 validFrom 和 validUntil 之间,validFrom 和 validUnti 的值类似于“2017-01-01 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 并分别获取年月和日,那么最有效的方法是什么?
【问题讨论】:
-
小心:您需要在特定时区进行转换才能获取日期字段。
Date没有时区。 -
什么是validFrom和validUntil?日期?字符串?您发布的代码有什么问题(假设您忘记将
compareTo粘贴到transcationDate.(parameter.getValidUntil())中? -
问题是我不应该在比较时累积小时数,它不应该依赖于时区,例如,如果 validUntil 是“2017-03-01 00:00:00”并且 transactionDate 来了"2017-03-01 10:00:00" 我应该返回 true 表示它在有效期内,validUntil 和 validFrom 是 Date 对象
-
考虑到您上次评论中的示例,我不确定我是否理解您的推理。
validUntil是您日期期间的上限,不是吗?那么它为什么要返回true并带有晚于它的日期呢?或者这只是一个错字,也许?另外,您使用的是哪个版本的 Java? -
@klehelley 他只想考虑年、月和日,而忽略其他。这就是他回归真实的原因。