java.util.Calendar
或java.time.LocalDate
获取星期几,使用Calendar
需结合SimpleDateFormat
格式化输出;Java 8及以上推荐LocalDate.getDayOfWeek()
直接返回英文星期名,或通过DateTimeFormatter
本地化输出。在Java中输出星期几有多种方法,主要分为传统Calendar
类和现代java.time
包(Java 8+推荐),以下是详细实现方案:
方法1:使用 java.time
包(推荐)
Java 8引入的java.time
API线程安全且设计清晰,是官方推荐方案。
示例1:输出当前日期的星期几
import java.time.LocalDate; import java.time.format.TextStyle; import java.util.Locale; public class Main { public static void main(String[] args) { LocalDate today = LocalDate.now(); // 获取当前日期 String dayOfWeek = today.getDayOfWeek() // 获取星期枚举(如 MONDAY) .getDisplayName(TextStyle.FULL, Locale.CHINA); // 转为中文(如“星期一”) System.out.println("今天是:" + dayOfWeek); } }
输出:今天是:星期一
(根据实际日期变化)
示例2:输出指定日期的星期几
import java.time.LocalDate; import java.time.format.TextStyle; import java.util.Locale; public class Main { public static void main(String[] args) { LocalDate customDate = LocalDate.of(2025, 10, 1); // 指定日期 String dayOfWeek = customDate.getDayOfWeek() .getDisplayName(TextStyle.FULL, Locale.CHINA); System.out.println("2025年10月1日是:" + dayOfWeek); } }
输出:2025年10月1日是:星期日
关键参数说明:
TextStyle
:控制输出格式FULL
→ 星期一SHORT
→ 周一NARROW
→ 一(部分语言可能不适用)
Locale
:指定语言环境Locale.CHINA
→ 中文Locale.US
→ 英文(如 Monday)
方法2:使用 Calendar
类(旧版)
适用于Java 8以下版本,但需注意线程安全问题。
import java.util.Calendar; import java.util.Locale; public class Main { public static void main(String[] args) { Calendar calendar = Calendar.getInstance(); int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); // 获取星期数字(1=周日,2=周一...) // 转换为中文星期 String[] weekDays = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; System.out.println("今天是:" + weekDays[dayOfWeek - 1]); } }
常见问题解决
-
数字转星期:
java.time
:直接调用DayOfWeek.of(1).getDisplayName(...)
(1=周一,7=周日)Calendar
:数字范围1~7(1=周日,7=周六)
-
中英文切换:
修改Locale
参数:// 英文输出 String enWeek = today.getDayOfWeek() .getDisplayName(TextStyle.FULL, Locale.US); // e.g., "Monday"
-
缩写形式:
// 中文缩写(如“周一”) String shortWeek = today.getDayOfWeek() .getDisplayName(TextStyle.SHORT, Locale.CHINA);
最佳实践建议
-
优先使用
java.time
:
新API避免线程安全问题,代码更简洁(如直接通过日期对象获取星期)。 -
处理用户输入日期:
结合DateTimeFormatter
解析字符串:String input = "2025-12-25"; LocalDate date = LocalDate.parse(input); // 自动解析标准格式 System.out.println(date.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.CHINA));
-
时区敏感场景:
使用ZonedDateTime
替代LocalDate
:ZonedDateTime zonedTime = ZonedDateTime.now(ZoneId.of("Asia/Shanghai")); String week = zonedTime.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.CHINA);
需求 | 推荐方法 |
---|---|
当前日期星期 | LocalDate.now().getDayOfWeek() |
指定日期星期 | LocalDate.of(...).getDayOfWeek() |
兼容旧项目(<Java8) | Calendar + 自定义数组 |
多语言支持 | 调整Locale 参数(如Locale.US ) |
官方文档参考:
通过标准API实现可确保代码稳定性和可维护性,避免自行维护星期映射表带来的潜在错误。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/29142.html