如何通过日期的名称获取日期?
例如:
Input: Monday
Output: 02/08/2021
Input: Tuesday
Output: 03/08/2021
我想获取当天最接近的日期。
如何通过日期的名称获取日期?
例如:
Input: Monday
Output: 02/08/2021
Input: Tuesday
Output: 03/08/2021
我想获取当天最接近的日期。
假设您要查找具有特定星期几的今天,一种方法是计算具有该日期的今天的第二天和前一天一周,并比较它们:
private static LocalDate closestDOW(DayOfWeek dow) {
LocalDate today = LocalDate.now();
LocalDate next = today.with(TemporalAdjusters.nextOrSame(dow));
LocalDate previous = today.with(TemporalAdjusters.previousOrSame(dow));
if (ChronoUnit.DAYS.between(today,next) < ChronoUnit.DAYS.between(previous,today)) {
return next;
} else {
return previous;
}
}
或者,确定下一个这样的一天是否最多在三天之后。如果是,那么它比前一天更接近。
private static LocalDate closestDOW(DayOfWeek dow) {
LocalDate today = LocalDate.now();
int daysDiff = today.getDayOfWeek().getValue() - dow.getValue();
int daysUntilNextDOW = daysDiff >= 0 ? 7 - daysDiff : -daysDiff;
if (daysUntilNextDOW <= 3) {
return today.plusDays(daysUntilNextDOW);
} else {
return today.with(TemporalAdjusters.previousOrSame(dow));
}
}
,
这是我对 OP 想要什么的理解 -
给定一周中的某一天作为输入,打印最接近今天的日期(与输入的一周中的同一天)。
我们可以使用 LocalDate
、DayOfWeek
和 TemporalAdjuster
来做到这一点。
逻辑是——
DayOfWeek
的实例。.toEpochDay()
检查哪一天离今天更近。import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
public static void main(String[] args) {
String inputDayOfWeekString = "SUNDAY";
DayOfWeek inputDayOfWeek = DayOfWeek.valueOf(inputDayOfWeekString);
LocalDate today = LocalDate.now();
if (today.getDayOfWeek().equals(inputDayOfWeek)) {
System.out.println(today);
} else {
LocalDate sameDayNextWeek = today.with(TemporalAdjusters.next(inputDayOfWeek));
LocalDate sameDayPreviousWeek = today.with(TemporalAdjusters.previous(inputDayOfWeek));
LocalDate dateCloserToToday = (sameDayNextWeek.toEpochDay() - today.toEpochDay()) < (today.toEpochDay() - sameDayPreviousWeek.toEpochDay()) ? sameDayNextWeek : sameDayPreviousWeek;
System.out.println(dateCloserToToday);
}
}