推荐使用java.time包的LocalDate.now().getDayOfWeek()获取星期几,支持中英文名称、ISO数字(1-7)及格式化输出,线程安全且语义清晰。

在 Java 中获取当前日期是星期几,推荐使用 java.time 包(Java 8+),它更简洁、线程安全且语义清晰。
用 LocalDate + DayOfWeek 获取星期名称(推荐)
这是最常用、最直观的方式:
- 获取当前日期:
LocalDate.now() - 调用
getDayOfWeek()得到DayOfWeek枚举 - 用
getDisplayName()可输出中文或英文名称
示例代码:
import java.time.LocalDate; import java.time.DayOfWeek; import java.time.format.TextStyle; import java.util.Locale; LocalDate today = LocalDate.now(); DayOfWeek dayOfWeek = today.getDayOfWeek(); // 输出中文(如“星期三”) String cnName = dayOfWeek.getDisplayName(TextStyle.FULL, Locale.CHINA); // 输出英文(如“Wednesday”) String enName = dayOfWeek.getDisplayName(TextStyle.FULL, Locale.ENGLISH); System.out.println(cnName); // 例如:星期三 System.out.println(enName); // 例如:Wednesday
获取星期几的数字(1~7)
DayOfWeek 的 getValue() 返回 ISO 标准值:周一为 1,周日为 7。
立即学习“Java免费学习笔记(深入)”;
- 周一 → 1,周二 → 2,……,周日 → 7
- 若需“周日=0、周一=1……周六=6”这种旧习惯,可手动转换:
(dayOfWeek.getValue() % 7)
示例:
int isoValue = today.getDayOfWeek().getValue(); // 周一返回 1,周日返回 7 int sundayZeroBased = (isoValue % 7); // 周日变 0,其余不变(周一=1…周六=6)
兼容老项目:Calendar 方式(不推荐新代码使用)
如果还在维护 Java 7 或更早项目,可用 Calendar,但注意:
-
Calendar.DAY_OF_WEEK返回值:周日=1,周一=2,……,周六=7 - 与 ISO 标准相反,容易出错
- 非线程安全,需每次新建实例
示例:
Calendar cal = Calendar.getInstance();
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); // 周日=1,周一=2...
String[] weeks = {"", "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
System.out.println(weeks[dayOfWeek]);
格式化字符串中直接输出星期(适合日志/界面)
用 DateTimeFormatter 一行搞定:
-
EEEE→ 全称(如“星期三”) -
EEE→ 简称(如“周三”) -
E→ 单字(如“三”,依赖 locale 和模式支持)
示例:
import java.time.format.DateTimeFormatter;
DateTimeFormatter f1 = DateTimeFormatter.ofPattern("yyyy-MM-dd EEEE", Locale.CHINA);
System.out.println(LocalDate.now().format(f1)); // 2024-05-22 星期三
DateTimeFormatter f2 = DateTimeFormatter.ofPattern("MM/dd EEE", Locale.CHINA);
System.out.println(LocalDate.now().format(f2)); // 05/22 周三


















