以下代码段可帮助您查找一年中的第一个星期日,也可以将其替换为所需的任何一天。为此,我们可以使用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