2.20.Calendar类的常见用法

Java 中 Calendar 类用法总结

Calendar 是 Java 用于日期时间操作抽象类,用来替代 Date 类的部分功能,可获取 / 设置年、月、日、时、分、秒、星期等。


1. 获取 Calendar 对象

Calendar calendar = Calendar.getInstance();
  • 默认获取当前系统时间
  • 是抽象类,不能直接 new

getInstance方法详解如下:


2. 常用字段(常量)

  • Calendar.YEAR:年
  • Calendar.MONTH:月(0~11,0=1 月
  • Calendar.DAY_OF_MONTH / DATE:日
  • Calendar.HOUR_OF_DAY:24 小时制
  • Calendar.HOUR:12 小时制
  • Calendar.MINUTE:分
  • Calendar.SECOND:秒
  • Calendar.DAY_OF_WEEK:星期(1 = 周日,2 = 周一…7 = 周六

3. 获取时间字段

int year  = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1; 
int day   = calendar.get(Calendar.DAY_OF_MONTH);

get方法详解:


4. 设置时间

Ⅰ.直接设置:

calendar.set(Calendar.YEAR, 2025);
calendar.set(2025, 11, 31); // 年,月(0~11),日

set方法详解:

Ⅱ.加减时间:

calendar.add(Calendar.DAY_OF_MONTH, 7);  // 加7天
calendar.add(Calendar.MONTH, -1);        // 减1个月

add方法详解:


5. 与 Date 互转

// Calendar → Date
Date date = calendar.getTime();

// Date → Calendar
calendar.setTime(date);

getTime方法和setTime方法详解:


6. 常见坑

  1. 月份从 0 开始:0 = 一月,11 = 十二月
  2. 星期从周日 = 1 开始
  3. 线程不安全,多线程不能共用一个 Calendar

7. 现代替代方案(Java 8+)

实际开发优先用:

  • LocalDateLocalDateTimeLocalTime
  • DateTimeFormatter

更简洁、安全、无坑。


8.getTimeInMillis方法:Calendar对象表示的时间转换成毫秒


9.获取月份注意事项:

问题分析:Calendar 月份的「0 起始」坑->

Calendar 的月份是从 0 开始计数(输入0=1 月,输入1=2 月,…,输入11=12 月),

Ⅰ. 验证日期:

假设现在输入2026年3月8日,查询周几->2026 年 3 月 8 日:星期日(预期的日期)

Ⅱ. 错误代码定位:

int month=3;
calendar.set(2026,month+1,8); // 错误:month=3 → 3+1=4 → 对应5月
  • month=3 本想表示 3 月,但 Calendar 中 3 月对应的常量是 Calendar.MARCH = 2
  • 你加 1 后变成 4,对应 Calendar.MAY = 4(5 月),所以日期完全错了。

Ⅲ. 修复后的完整代码:

package Test;

import java.util.Calendar;
import java.util.Date;

public class Practice1 {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        int month = 3; // 想设置3月
        // 修复:月份需要减1(因为Calendar月份0起始)
        calendar.set(2026, month - 1, 8); 
        Date d = new Date(calendar.getTimeInMillis());
        System.out.println(d); // 输出:Sun Mar 08 16:xx:xx CST 2026(星期日,正确)
    }
}

Ⅳ.总结:

  1. 核心问题:Calendar 月份是「0 起始」(输入0=1 月,输入11=12 月),代码中错误地给月份 + 1,导致日期从 3 月变成 5 月;
  2. 修复方案:设置 3 月时,要么用 month-1(month=3 → 2),要么直接用 Calendar.MARCH
  3. 避坑建议:优先使用 Calendar 内置的月份常量(如 Calendar.JANUARY->直接1月Calendar.MARCH),避免手动写数字出错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值