You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按指定Locale重新排列Java的DayOfWeek枚举元素?

按指定Locale重新排列DayOfWeek枚举顺序

我们可通过Locale软编码确定一周的第一天,示例代码如下:

DayOfWeek firstDayOfWeek = WeekFields.of( Locale.US ).getFirstDayOfWeek() ;  // Sunday-Saturday.

此外,Java提供了定义星期的内置枚举DayOfWeek:

DayOfWeek[] dows = DayOfWeek.values() ;  // Monday-Sunday

请问如何创建按指定Locale定义顺序重新排列的DayOfWeek枚举对象数组或列表?

目标是按照特定Locale代表的文化规范,展示一周七天的顺序。


可以借助WeekFields获取指定Locale对应的一周起始日,以此为起点循环生成符合当地规范的星期顺序,具体实现如下:

生成有序列表

import java.time.DayOfWeek;
import java.time.temporal.WeekFields;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

public class LocalizedWeekDays {
    public static List<DayOfWeek> getLocalizedWeekDays(Locale locale) {
        WeekFields weekFields = WeekFields.of(locale);
        DayOfWeek firstDay = weekFields.getFirstDayOfWeek();
        List<DayOfWeek> localizedDays = new ArrayList<>(7);
        
        DayOfWeek currentDay = firstDay;
        for (int i = 0; i < 7; i++) {
            localizedDays.add(currentDay);
            currentDay = currentDay.plus(1);
        }
        return localizedDays;
    }

    public static void main(String[] args) {
        // 美国地区(周日为一周起始)
        List<DayOfWeek> usWeekDays = getLocalizedWeekDays(Locale.US);
        usWeekDays.forEach(System.out::println); // 输出:SUNDAY, MONDAY, ..., SATURDAY
        
        // 法国地区(周一为一周起始)
        List<DayOfWeek> frWeekDays = getLocalizedWeekDays(Locale.FRANCE);
        frWeekDays.forEach(System.out::println); // 输出:MONDAY, TUESDAY, ..., SUNDAY
    }
}

生成有序数组

如果需要数组形式,直接将列表转换即可:

DayOfWeek[] localizedArray = getLocalizedWeekDays(locale).toArray(new DayOfWeek[0]);

原理说明

  • WeekFields.of(locale)会根据Locale对应的文化规则,返回该地区的星期字段定义,核心就是一周的起始日。
  • DayOfWeek.plus(1)方法自带循环逻辑:当当前是SATURDAY时,调用plus(1)会自动返回SUNDAY,刚好适配一周的循环排列需求。

内容的提问来源于stack exchange,提问作者Basil Bourque

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 22:50:40