【问题标题】:Java get a date by the given day name [duplicate]Java通过给定的日期名称获取日期[重复]
【发布时间】:2021-08-01 06:39:38
【问题描述】:

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

例如:

Input: Monday
Output: 02/08/2021

Input: Tuesday
Output: 03/08/2021

我想得到一天中最接近的日期。

【问题讨论】:

  • 您的搜索结果是什么?我希望你能找到建议使用DayOfWeekLocalDate 的页面,它们都来自java.time, the modern Java date and time API
  • 您所说的“最接近”是指距今天最近的吗?
  • 最近的非过去日(最多 6 天后)或最近的一天(最多 3 天后)?

标签: java date


【解决方案1】:

这是我对 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);
    }
}

【讨论】:

    【解决方案2】:

    假设您想要找到距今天最近的一天,它具有特定的星期几,一种方法是计算从今天开始的第二天和前一天周,然后比较它们:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-09
      • 1970-01-01
      • 2020-08-24
      • 2021-08-21
      • 1970-01-01
      • 2015-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多