将日期与可选"comparison values"进行比较



我想将当前日期与将提供的以下可选变量进行比较(可以使用多个(:年、月、日、小时、分钟、秒。

可能的比较运算符是"0";在"之前"在";或";等于"-对于单变量比较,beforeOrEquals、afterOrEquals运算符也会有所帮助。

以下是两个工作示例:

如果只设置年份,则只检查年份是否在当前年份之前/之后。如果同时设置了年份和月份,则会在比较中同时考虑年份和月份。

此比较的特殊之处在于,例如,如果只设置了月份,而没有设置年份。在这种情况下。2020年2月应该在21日之前。2020年3月21日之后。2021年1月。

对于当前日期,将使用LocalDateTime。比较值(年、月等(为整数。如果它们是-1,就不应该对它们进行比较。

这就是我目前进行比较的方式:

public final boolean compare(){
//These values will need to be changed accordingly before the comparison. I have my own way of letting the user provide them as input.
int year = -1;
int month = -1;
int day = -1;
int hours = -1;
int minutes = -1;
int seconds = -1;
String operation = "";
String timeZone = null;
final LocalDateTime currentTime = timeZone == null ? LocalDateTime.now() : LocalDateTime.now(timeZone.toZoneId());

final LocalDateTime timeToCompare = LocalDateTime.of(
year > -1 ? year  : currentTime.getYear(),
month > -1 ? month : currentTime.getMonthValue(),
day > -1 ? day : currentTime.getDayOfMonth(),
hours > -1 ? hours : currentTime.getHour(),
minutes > -1 ? minutes : currentTime.getMinute(),
seconds > -1 ? seconds : currentTime.getSecond()
);
if(operation.equals("before")){
if(!currentTime.isBefore(timeToCompare)){
return false;
}
} else if(operation.equals("after")){
if(!currentTime.isAfter(timeToCompare)){
return false;
}
}
return true;
}

这是一种很好的实现方式吗,还是有一种更具性能的方式,因为根本不需要比较每个变量?

我将应用KISS原理:

record PartialDateTime (Integer year, Integer month, Integer day, Integer hour, Integer minute, Integer second) 
implements Comparable<PartialDateTime> {
public int compareTo(PartialDateTime other) {
// your impl here
}
public boolean isBefore(PartialDateTime other) {
return compareTo(other) < 0;
}
// etc for other truthy comparison methods
}

相关内容

  • 没有找到相关文章

最新更新