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

Java使用java.util.Calendar获取月份比实际滞后一个月的问题

问题根源

java.util.Calendar类的MONTH字段采用0起始的计数规则:0对应1月(January),1对应2月(February),以此类推,11对应12月(December)。当前实际为11月时,调用cal.get(Calendar.MONTH)得到的返回值为10,你代码中case 10匹配的是10月(October)的输出逻辑,因此会输出错误的月份。

修复方案

两种可选修复方式:

  • 方案1:获取月份后直接加1,适配现有switch逻辑
    只需将原代码中int m = cal.get (Calendar.MONTH);修改为int m = cal.get (Calendar.MONTH) + 1;,即可得到1~12范围的常规月份值,和你现有switch的case 1~case 12完全匹配,无需修改其他逻辑。
  • 方案2:使用Calendar内置月份常量匹配,可读性更强
    无需修改月份取值代码,直接将switch的case值替换为Calendar内置的月份常量即可,避免记错计数规则出错:
switch(m) {
    case Calendar.JANUARY:
        System.out.println ("today is " + d + " of January " + y);
        break;
    case Calendar.FEBRUARY:
        System.out.println ("today is " + d + " of February " + y);
        break;
    // 剩余月份以此类推替换即可
}
修复后完整代码示例(采用方案1)
import java.util.Calendar;

public class Main {
    public static void main (String[] args) {
        Calendar cal = Calendar.getInstance ();
        int y = cal.get (Calendar.YEAR);
        // 月份获取后+1,转为1-12的常规计数
        int m = cal.get (Calendar.MONTH) + 1;
        int d = cal.get (Calendar.DATE);

        switch(m) {
            case 1:
                System.out.println ("today is " + d + " of January " + y);
                break;
            case 2:
                System.out.println ("today is " + d + " of February " + y);
                break;
            case 3:
                System.out.println("today is " + d + " of March " + y);
                break;
            case 4:
                System.out.println("today is " + d + " of April " + y);
                break;
            case 5:
                System.out.println("today is " + d + " of May " + y);
                break;
            case 6:
                System.out.println("today is " + d + " of June " + y);
                break;
            case 7:
                System.out.println("today is " + d + " of July " + y);
                break;
            case 8:
                System.out.println("today is " + d + " of August " + y);
                break;
            case 9:
                System.out.println("today is " + d + " of September " + y);
                break;
            case 10:
                System.out.println("today is " + d + " of October " + y);
                break;
            case 11:
                System.out.println("today is " + d + " of November " + y);
                break;
            case 12:
                System.out.println("today is " + d + " of December " + y);
                break;
      }
  }
}
额外提示

原代码中二月的英文拼写存在笔误,Febuary已在上述示例中修正为February。

内容的提问来源于stack exchange,提问作者noob java programmer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:06:04