Java如何仅使用小时、分钟和秒来比较LocalTime

Java如何仅使用小时、分钟和秒来比较LocalTime,java,java-time,localtime,datetime-comparison,Java,Java Time,Localtime,Datetime Comparison,我想比较2LocalTime是否相等,但只使用小时、分钟和秒,而不是变量的所有数据,如毫秒 我怎样才能做到这一点呢?您可以将这两种方式的小时数设置为相同,而您只留下了不同的分钟和秒数,您可以来这两次 例如: time1 = ... time2 = ... if (time1.withHour(0).equals(time2.withHour(0))) { System.out.println('Minutes and Seconds of time1 and time2 are equal

我想比较2
LocalTime
是否相等,但只使用小时、分钟和秒,而不是变量的所有数据,如毫秒


我怎样才能做到这一点呢?

您可以将这两种方式的小时数设置为相同,而您只留下了不同的分钟和秒数,您可以来这两次

例如:

time1 = ...
time2 = ...

if (time1.withHour(0).equals(time2.withHour(0))) {
  System.out.println('Minutes and Seconds of time1 and time2 are equal!');
}

您可以将这两种模式中的小时数设置为相同,但只保留了不同的分和秒数,您可以来这两次

例如:

time1 = ...
time2 = ...

if (time1.withHour(0).equals(time2.withHour(0))) {
  System.out.println('Minutes and Seconds of time1 and time2 are equal!');
}
像这样的

LocalTime t1=..
LocalTime t2=..
LocalTime.of(t1.getHour(), t1.getMinutes()).compareTo(LocalTime.of(t2.getHour(),t2.getMinutes());
当然,如果你需要这样的东西,也可以使用

LocalTime t1=..
LocalTime t2=..
LocalTime.of(t1.getHour(), t1.getMinutes()).compareTo(LocalTime.of(t2.getHour(),t2.getMinutes());

当然,如果您需要,也可以将两个nano设置为一个数字,使它们彼此相同,例如,零,以进行比较

LocalTime localTime1 = LocalTime.of(1, 2, 3, 100);
LocalTime localTime2 = LocalTime.of(1, 2, 3, 47);
if (localTime1.withNano(0).equals(localTime2.withNano(0))){
    System.out.println("something");
}

您可以将两个nano设置为一个数字,使它们彼此相同,例如,零,以进行比较

LocalTime localTime1 = LocalTime.of(1, 2, 3, 100);
LocalTime localTime2 = LocalTime.of(1, 2, 3, 47);
if (localTime1.withNano(0).equals(localTime2.withNano(0))){
    System.out.println("something");
}

考虑到问题的上一次编辑版本,您可以通过这种方式将
LocalTime
的两个实例按小时、分钟和秒进行比较:

LocalTime lt1 = LocalTime.now(); // usually contains seconds and subseconds
LocalTime lt2 = LocalTime.of(22, 48); // example with zero second part

boolean isEqualInSecondPrecision = 
    lt1.truncatedTo(ChronoUnit.SECONDS).equals(lt2.truncatedTo(ChronoUnit.SECONDS));

考虑到问题的上一次编辑版本,您可以通过这种方式将
LocalTime
的两个实例按小时、分钟和秒进行比较:

LocalTime lt1 = LocalTime.now(); // usually contains seconds and subseconds
LocalTime lt2 = LocalTime.of(22, 48); // example with zero second part

boolean isEqualInSecondPrecision = 
    lt1.truncatedTo(ChronoUnit.SECONDS).equals(lt2.truncatedTo(ChronoUnit.SECONDS));

不是重复的,因为他要求的是Java 8中的
LocalTime
,而不是
Java.util.Date
。请举例说明您拥有的代码,以及您希望比较发生的位置此比较器应该执行此操作:
comparator.comparingInt(LocalTime::getMinute)。然后比较(LocalTime::getSecond)
不是重复的,因为他在Java 8中要求的是
LocalTime
,而不是
Java.util.Date
。请举一个您拥有的代码的例子,以及您希望比较发生的位置。这个比较器应该这样做:
comparator.comparingit(LocalTime::getMinute)。然后比较(LocalTime::getSecond)
这是正确的答案,除了原始问题已被编辑,现在询问如何在忽略分数秒的情况下比较时/分/秒,因此它应该是
withNano
而不是withHour。这是正确的答案,除了原来的问题已经被编辑过,现在问的是如何在忽略分数秒的情况下比较小时/分钟/秒,所以它应该是
withNano
而不是withHour。我倾向于
localTime1.truncatedTo(ChronoUnit.seconds)
(类似地
localTime2
)。因此,读者不必怀疑毫秒和微秒是否也被设置为0(它们是0,但不是每个人都会记住)。两者都创建了
LocalTime
的新实例,而
LocalTime.truncatedTo
的实现则更加复杂。好吧,没什么大不了的,选择你喜欢的。我倾向于选择
localTime1.truncatedTo(ChronoUnit.SECONDS)
(同样的
localTime2
)。因此,读者不必怀疑毫秒和微秒是否也被设置为0(它们是0,但不是每个人都会记住)。两者都创建了
LocalTime
的新实例,而
LocalTime.truncatedTo
的实现则更加复杂。好吧,没什么大不了的,选择你喜欢的。