使用 java.time 包中的 localdate 和 weekfields 可以获取当前周的起止日期。通过 temporaladjusters.previousorsame(dayofweek.monday) 获取周一,temporaladjusters.nextorsame(dayofweek.sunday) 获取周日。

如何根据 ISO-8601 标准获取周一到周日的日期范围
ISO-8601 标准规定每周从星期一开始,到星期日结束。在 Java 中,可以通过 WeekFields.ISO 来获取对应的星期枚举值,并结合 TemporalAdjusters 进行计算。

import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
import java.time.DayOfWeek;
public class DateRange {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
LocalDate startOfWeek = today.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
LocalDate endOfWeek = today.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY));
System.out.println("Start: " + startOfWeek);
System.out.println("End: " + endOfWeek);
}
}
如何处理非 ISO 标准的本地化周起始日(如美国周日开始)
在美国等地区,一周通常从星期日开始。可以使用 WeekFields.of(Locale.US) 来定义这种本地化的周规则,并据此调整日期。

import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
import java.time.temporal.WeekFields;
import java.util.Locale;
public class LocalizedDateRange {
public static void main(String[] args) {
LocalDate today = LocalDate.now();
WeekFields weekFields = WeekFields.of(Locale.US);
LocalDate startOfWeek = today.with(TemporalAdjusters.previousOrSame(weekFields.getDayOfWeek().firstDayOfWeek()));
LocalDate endOfWeek = today.with(TemporalAdjusters.nextOrSame(weekFields.getDayOfWeek().getMinimalDaysInFirstWeek() == 1 ? weekFields.getDayOfWeek().firstDayOfWeek().minus(1) : weekFields.getDayOfWeek().firstDayOfWeek().plus(6)));
// 简化:直接获取周日
LocalDate endOfWeekSimple = today.with(TemporalAdjusters.nextOrSame(java.time.DayOfWeek.SUNDAY));
System.out.println("Start: " + startOfWeek);
System.out.println("End: " + endOfWeekSimple);
}
}
当当前日期恰好是周起始日时,程序返回什么结果
如果当前日期恰好是周起始日(例如周一),previousOrSame 会返回当天,而不会回退到上一周的同一天。这确保了边界情况的正确处理。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











