Java通过给定的日期名称获取日期

如何通过日期的名称获取日期?

例如:

Input: Monday
Output: 02/08/2021

Input: Tuesday
Output: 03/08/2021

我想获取当天最接近的日期。

ldsfh 回答:Java通过给定的日期名称获取日期

假设您要查找具有特定星期几的今天,一种方法是计算具有该日期的今天的第二天和前一天一周,并比较它们:

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 想要什么的理解 -

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

我们可以使用 LocalDateDayOfWeekTemporalAdjuster 来做到这一点。

逻辑是——

  • 将输入的星期几转换为 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);
    }
}
本文链接:https://www.f2er.com/3098.html

大家都在问