上一篇
Java中可通过
Calendar类或Java 8的
LocalDate判断星期几,使用
Calendar.DAY_OF_WEEK获取数字(1为周日,7为周六),或调用
LocalDate.getDayOfWeek()直接获得英文星期枚举值,灵活转换即可。
使用 java.util.Calendar(Java 7及以下)
import java.util.Calendar;
public class WeekdayExample {
public static void main(String[] args) {
// 创建Calendar实例
Calendar calendar = Calendar.getInstance();
// 获取星期几(注意:周日=1, 周一=2, ..., 周六=7)
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
// 转换为可读字符串
String weekdayName = "";
switch (dayOfWeek) {
case Calendar.SUNDAY: // 1
weekdayName = "星期日";
break;
case Calendar.MONDAY: // 2
weekdayName = "星期一";
break;
case Calendar.TUESDAY: // 3
weekdayName = "星期二";
break;
case Calendar.WEDNESDAY: // 4
weekdayName = "星期三";
break;
case Calendar.THURSDAY: // 5
weekdayName = "星期四";
break;
case Calendar.FRIDAY: // 6
weekdayName = "星期五";
break;
case Calendar.SATURDAY: // 7
weekdayName = "星期六";
break;
}
System.out.println("今天是: " + weekdayName);
}
}
注意事项:
Calendar的星期索引从周日(1)开始,周六(7)结束。- 需显式处理时区(默认使用系统时区)。
使用 java.time 包(Java 8+推荐)
Java 8引入的java.time API更简洁且线程安全:
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.format.TextStyle;
import java.util.Locale;
public class WeekdayExampleJava8 {
public static void main(String[] args) {
// 获取当前日期
LocalDate today = LocalDate.now();
// 获取星期几(DayOfWeek枚举)
DayOfWeek dayOfWeek = today.getDayOfWeek();
// 直接输出中文星期
String weekdayName = dayOfWeek.getDisplayName(TextStyle.FULL, Locale.CHINESE);
System.out.println("今天是: " + weekdayName); // 星期一
// 获取数字表示(周一=1, 周日=7)
int dayNumber = dayOfWeek.getValue();
System.out.println("星期数字: " + dayNumber);
}
}
优势:

- 直接支持本地化(如
Locale.CHINESE)。 - 清晰的枚举值(
DayOfWeek.MONDAY)。 - 避免
Calendar的索引歧义(周一=1,周日=7)。
处理特定日期
若需判断任意日期的星期几:
import java.time.LocalDate;
public class SpecificDateExample {
public static void main(String[] args) {
// 指定日期(2025年10月1日)
LocalDate date = LocalDate.of(2025, 10, 1);
// 获取星期几
String weekdayName = date.getDayOfWeek()
.getDisplayName(TextStyle.FULL, Locale.CHINESE);
System.out.println("2025年国庆是: " + weekdayName); // 输出:星期日
}
}
关键注意事项
-
时区问题:
-
LocalDate.now()使用系统默认时区。
-
跨时区应用需用
ZonedDateTime指定时区:import java.time.ZoneId; import java.time.ZonedDateTime; ZonedDateTime zonedTime = ZonedDateTime.now(ZoneId.of("Asia/Shanghai")); DayOfWeek day = zonedTime.getDayOfWeek();
-
-
星期的数字表示:
java.time:周一=1, 周日=7(符合ISO标准)。Calendar:周日=1, 周六=7(易混淆)。
-
语言本地化:

- 通过
Locale参数切换语言(如Locale.US输出”Monday”)。
- 通过
- Java 7及以下:用
Calendar,但需注意索引偏移和时区。 - Java 8+:推荐
java.time,语法简洁、符合标准,且支持本地化。 - 实际开发中,优先使用
DayOfWeek枚举,避免硬编码数字,提高代码可读性。
引用说明:本文代码基于Oracle官方Java文档,
java.time包设计参考ISO 8601日期标准,时区数据来源于IANA时区数据库。
