我想将当前日期与将提供的以下可选变量进行比较(可以使用多个(:年、月、日、小时、分钟、秒。
可能的比较运算符是"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
}