发布于2026-07-08 阅读(0)
扫一扫,手机访问
LocalDate.getDayOfWeek() 这个方法的返回值可不是简单的数字或字符串——它是一个 DayOfWeek 枚举。这意味着什么?直接拿它来显示星期几,通常需要做一层转换。而且它本身不携带语言环境信息,要显示中文还是英文,得手动适配一下。下面把几个常用场景拆开来说。
DayOfWeek 是 Ja va 8 引入的不可变枚举,按 ISO-8601 标准定义(周一为第 1 天,周日为第 7 天):
MONDAY → 值为 1TUESDAY → 值为 2WEDNESDAY → 值为 3THURSDAY → 值为 4FRIDAY → 值为 5SATURDAY → 值为 6SUNDAY → 值为 7这里提个醒:这个顺序和旧版 Calendar.SUNDAY = 1 的习惯完全不同,千万别图省事直接用 getDayOfWeek().getValue() 做硬编码判断。否则某天查出来“6”以为是周五,结果却是周六——这种坑踩过的人都懂。
推荐用 getDisplayName() 配合 TextStyle 和 Locale,一行代码搞定,根本不用手写什么“周一、周二”的映射表:
LocalDate date = LocalDate.of(2024, 6, 12); // 周三
String cnWeek = date.getDayOfWeek()
.getDisplayName(TextStyle.FULL, Locale.CHINA); // "星期三"
String shortCn = date.getDayOfWeek()
.getDisplayName(TextStyle.SHORT, Locale.CHINA); // "周三"
用 Locale.SIMPLIFIED_CHINESE 效果一样,看个人习惯选一个就行。
套路完全一样,换个 Locale 和 TextStyle 就出来了:
getDisplayName(FULL, Locale.ENGLISH) → "Wednesday"getDisplayName(SHORT, Locale.ENGLISH) → "Wed"getDisplayName(NARROW, Locale.ENGLISH) → "W"(单字母形式)如果非要用全大写显示,比如报表里常见的 WEDNESDAY,在 FULL 结果后面链式调用 .toUpperCase() 就行。
直接用枚举常量做 switch 或 if 判断,语义清晰,类型安全,比写魔法数字强一百倍:
DayOfWeek dow = date.getDayOfWeek();
if (dow == DayOfWeek.SATURDAY || dow == DayOfWeek.SUNDAY) {
System.out.println("周末");
} else {
System.out.println("工作日");
}
// 或用 switch(Ja va 14+ 支持枚举 switch 表达式)
String type = switch (dow) {
case SATURDAY, SUNDAY -> "休息日";
default -> "工作日";
};
千万别用 getValue() == 6 这种写法——哪天同事改个标准就全崩了,而且读代码的人还得去查 6 到底代表星期几,何必呢。
事儿不复杂,但容易忽略的是:显示成什么样子完全取决于 TextStyle 和 Locale 的组合,业务里最好统一封装成一个工具方法,别每个地方都写一遍 getDisplayName(...),既冗余又容易出错。

售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8