Java根据给定的日名获取日期



如何根据日期名称获取日期?

例如:

Input: Monday
Output: 02/08/2021
Input: Tuesday
Output: 03/08/2021

我想知道最近的日期。

这是我对OP想要什么的理解-

给定一周中的某一天作为输入,打印与今天最接近的日期(与输入的一周中的同一天)

我们可以用LocalDate,DayOfWeekTemporalAdjuster来做。

逻辑是-

  • 将输入的星期转换为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);
}
}

假设你想找到离今天最近的一天有一个特定的星期,一种方法是计算离今天有那个星期的第二天和前一天,并比较它们:

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));
}
}

最新更新