You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java调用Calendar类获取日期星期值输出错误问题排查

问题原因
  • 核心错误是SimpleDateFormat的日期模式符使用错误:小写m代表的是分钟,大写M才代表月份。
  • 你写的"dd/mm/yyyy"模式会把输入27/09/2021里的09解析为分钟,月份字段没有对应输入就会取默认值1月,最终得到的是2021年1月27日0点09分的日期对象,这个日期实际是周三,所以DAY_OF_WEEK返回值为4,和你预期的9月27日周一完全不符。
修复方案

方案1:直接修正原有代码的日期模式

把SimpleDateFormat的初始化代码改为:

SimpleDateFormat myFormat = new SimpleDateFormat("dd/MM/yyyy");

修改后就能正确解析出2021年9月27日的日期,后续取星期的结果也会对应正确。

注意:SimpleDateFormat是线程不安全的,不要定义为全局静态变量在多线程环境下共用。

方案2(更推荐,Java 8+适用):使用java.time新日期API

Java 8之后推出的新日期API解决了旧API线程不安全、设计混乱的问题,代码示例如下:

public static void function(String newDate){
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
    LocalDate date = LocalDate.parse(newDate, formatter);
    // 获取星期枚举,直接判断是否为周末
    DayOfWeek dayOfWeek = date.getDayOfWeek();
    System.out.println(dayOfWeek); // 输出 MONDAY
    System.out.println(dayOfWeek.getValue()); // 输出1(新API周一为1,周日为7,更符合日常认知)
    // 判断是否为周末示例
    if(dayOfWeek == DayOfWeek.SATURDAY || dayOfWeek == DayOfWeek.SUNDAY){
        System.out.println("是周末");
    }
}

内容的提问来源于stack exchange,提问作者william_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 05:09:03