gpt4 book ai didi

Java 8 DateTime 检查期间是否包含特定日期

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:21:32 26 4
gpt4 key购买 nike

我想检查一段 to 日期是否包含 2 月 29 日。

private static final MonthDay LEAP = MonthDay.of(Month.FEBRUARY, 29);

我试过:

if (LEAP.isAfter(beginDate) && LEAP.isBefore(maturity)) {

}

但是 beginDatematurity 来自类型 LocalDate所以方法 .isAfter.isBefore 不能使用。

示例

beginDate 是 15.01.2012
成熟度 是 2013 年 1 月 20 日

在此期间,2 月 29 日存在

解决方案

我终于找到了解决办法:

for (int i = beginDate.getYear(); i <= maturity.getYear(); i++) {
final Year year = Year.of(i);
if (year.isLeap()) {
if (beginDate.compareTo(LEAP.atYear(i)) <= 0 || maturity.compareTo(LEAP.atYear(i)) >= 0) {
minMaturity.plusDays(1);
}
}
return false;
}

最佳答案

一种方法是创建一个返回下一个 2 月 29 日的 TemporalAdjuster,并检查 maturity 是在该日期之前还是之后。示例(未测试):

public static TemporalAdjuster nextOrSame29Feb() {
return temporal -> {
LocalDate input = LocalDate.from(temporal);
if (input.isLeapYear()) {
LocalDate feb29 = input.with(MonthDay.of(FEBRUARY, 29));
if (!input.isAfter(feb29)) return feb29;
}
for (int year = input.getYear() + 1; ; year++) {
if (Year.isLeap(year)) return LocalDate.of(year, FEBRUARY, 29);
}
};
}

你的代码变成:

boolean contains29Feb = !maturity.isBefore(beginDate.with(nextOrSame29Feb()));

关于Java 8 DateTime 检查期间是否包含特定日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26403911/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com