如何获得Java年度的第一个星期日?

以下代码段可帮助您查找一年中的第一个星期日,也可以将其替换为所需的任何一天。为此,我们可以使用TemporalAdjusters.firstInMonth调节器,该调节器将返回同月的第一个匹配日期的新日期。用于“一月的第一个星期日”之类的表达。

因为我们想首先获得一年中的第一个星期日,所以我们创建了一个LocalDate代表2020年1月1日的星期日。然后我们调用该with()方法,并向传递firstInMonth调节器以DayOfWeek.SUNDAY进行查找。除了使用Java 8日期时间API外,您还可以使用旧的java.util.Calendar类,如下面的代码片段所示。但是使用新的日期时间API可以使您更具可读性,更简单和更少的代码编写。

package org.nhooo.example.datetime;

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.Month;
import java.time.ZoneId;
import java.util.Calendar;

import static java.time.temporal.TemporalAdjusters.firstInMonth;

public class FirstSundayOfTheYear {
    public static void main(String[] args) {
        // 使用Java 8日期时间获取一年中的第一个星期日
        LocalDate now = LocalDate.of(2020, Month.JANUARY, 1);
        LocalDate sunday = now.with(firstInMonth(DayOfWeek.SUNDAY));
        System.out.println("The first Sunday of 2020 falls on: " + sunday);

        // 使用旧的java.util.Calendar获取一年中的第一个星期日
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        calendar.set(Calendar.DAY_OF_WEEK_IN_MONTH, 1);
        calendar.set(Calendar.MONTH, Calendar.JANUARY);
        calendar.set(Calendar.YEAR, 2020);
        System.out.println("The first Sunday of 2020 falls on: " + calendar.getTime());
        System.out.println("The first Sunday of 2020 falls on: " +
            LocalDate.ofInstant(calendar.getTime().toInstant(), ZoneId.systemDefault()));
    }
}

此代码段将打印出以下输出:

The first Sunday of 2020 falls on: 2020-01-05
The first Sunday of 2020 falls on: Sun Jan 05 04:39:59 CST 2020
The first Sunday of 2020 falls on: 2020-01-05