上一篇                     
               
			  Java如何输出星期几?
- 后端开发
- 2025-06-18
- 2131
 在Java中,可通过
 
 
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) | 
官方文档参考:
- Java 17 DayOfWeek文档
- Java 8日期时间教程
通过标准API实现可确保代码稳定性和可维护性,避免自行维护星期映射表带来的潜在错误。
 
  
			 
			