用Java确定第二天的日期

问题描述

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

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

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

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

解决方法

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

modern Date-Time API 中详细了解 java.timeTrail: Date Time*


* 出于任何原因,如果您必须坚持使用 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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...