【问题标题】:How to get previous/last Saturday for a given date in Java?如何在Java中获取给定日期的上周六/上周六?
【发布时间】:2021-06-12 15:52:18
【问题描述】:

例如:- 字符串 fromDate="09/18/2020"; 我希望我的实际 fromDate 是上周六,即“09/12/2020”。

另一个例子:- 字符串 fromDate="09/01/2020"; 我希望我的实际 fromDate 是上周六,即“08/29/2020”。

【问题讨论】:

  • 到目前为止你尝试过什么?你被困在某个地方了吗?
  • 调整的形式为 (date_number + offset) % 7。offset 将是一个编译时间常数,您可以通过反复试验来计算。 Java 在将 JANARY 设置为零月份时臭名昭著。它可能在一周中的日子里做同样可怕的事情。
  • 这能回答你的问题吗? How to get the last Sunday before current date? 看看 Grzegorz Gajos 的答案,这是接受答案之后的第一个答案。
  • [只是撤消编程到 Java 标签中的看似自动的反对票]
  • 欢迎来到 Stack Overflow。请了解您应该在此处提问之前进行搜索,当您发布问题时,请告诉我们您的搜索结果并说明它如何未能解决您的问题。这是为您自己着想,因为 (1) 您通常可以更快地找到更好的答案 (2) 它使我们能够提供更精确和更有针对性的答案。它还倾向于防止或至少减少反对票的数量。

标签: java date datetime-format java-calendar


【解决方案1】:

TemporalAdjusters.previous

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        String fromDate = "09/18/2020";
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("M/d/u", Locale.ENGLISH);

        LocalDate date = LocalDate.parse(fromDate, dtf);

        LocalDate result = date.with(TemporalAdjusters.previous(DayOfWeek.SATURDAY));

        // Default LocalDate#toString implementation
        System.out.println(result);

        // Formatted
        System.out.println(result.format(dtf));
    }
}

输出:

2020-09-12
9/12/2020

Trail: Date Time 了解有关现代日期时间 API 的更多信息。


无论出于何种原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 和 7。如果您正在为一个 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project

【讨论】:

  • temporal 是开箱即用 Java 发行版的一部分吗?
  • @Bathsheba - 是的,它是标准 Java SE 8 的一部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多