【问题标题】:Determine next Day's Date in Java在 Java 中确定下一天的日期
【发布时间】:2021-06-03 15:10:03
【问题描述】:

如何通过一周中的某一天来确定第二天的日期?

例如,如果今天(6 月 3 日)我过了 星期一,它将给我 07 JUNE,因为下星期一将是 07六月?

我们在:6 月 6 日星期日,如果我进入:

  • 星期日,返回 6 月 6 日
  • 星期一,返回 6 月 7 日
  • 星期二,返回 6 月 8 日

【问题讨论】:

  • 使用java.time API,然后使用plus 一天。例如ZonedDateTime.now().plusDays(1).
  • 我认为这会有所帮助:stackoverflow.com/a/24177555/1039920
  • @MarkSholund 现货! (如果我正确理解了这个问题)
  • TemporalAdjusters.next( DayOfWeek )。如果您要仔细编辑您的问题,使其清晰具体,也许可以重新打开它并编写完整的答案。
  • 如果今天已经是星期一,您想要今天的日期还是下一个星期一?

标签: java date datetime days


【解决方案1】:

java.time

使用LocalDate#with(TemporalAdjuster) 获取所需的LocalDate

演示:

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) {
        // Test
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd MMMM", Locale.ENGLISH);
        System.out.println(getNextOrSameDate(DayOfWeek.SUNDAY).format(dtf));
        System.out.println(getNextOrSameDate(DayOfWeek.MONDAY).format(dtf));
        System.out.println(getNextOrSameDate(DayOfWeek.TUESDAY).format(dtf));
    }

    static LocalDate getNextOrSameDate(DayOfWeek dw) {
        return LocalDate.now().with(TemporalAdjusters.nextOrSame(dw));
    }
}

输出:

06 June
07 June
08 June

ONLINE DEMO

或者,您可以直接从函数返回工作日名称。

演示:

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) {
        // Test
        System.out.println(getNextOrSameWeekDayName(DayOfWeek.SUNDAY));
        System.out.println(getNextOrSameWeekDayName(DayOfWeek.MONDAY));
        System.out.println(getNextOrSameWeekDayName(DayOfWeek.TUESDAY));
    }

    static String getNextOrSameWeekDayName(DayOfWeek dw) {
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd MMMM", Locale.ENGLISH);
        return LocalDate.now().with(TemporalAdjusters.nextOrSame(dw)).format(dtf);
    }
}

ONLINE DEMO

或者,您可以将工作日名称传递为 String 并返回如上所示的任何内容。但是,这很容易出错,我建议您传递 enum 而不是前面示例中所示的 String

演示:

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) {
        // Test
        System.out.println(getNextOrSameWeekDayName("Sunday"));
        System.out.println(getNextOrSameWeekDayName("Monday"));
        System.out.println(getNextOrSameWeekDayName("Tuesday"));
    }

    static String getNextOrSameWeekDayName(String dw) {
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd MMMM", Locale.ENGLISH);
        return LocalDate.now()
                .with(TemporalAdjusters.nextOrSame(DayOfWeek.valueOf(dw.toUpperCase())))
                .format(dtf);
    }
}

ONLINE DEMO

Trail: Date Time了解更多关于java.timemodern 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

【讨论】:

    猜你喜欢
    • 2010-10-19
    • 2015-12-03
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    相关资源
    最近更新 更多