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时区数据库。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/29411.html