常用类_Calendar和GregorianCalendar的使用_日期计算

本文详细介绍了Java中Calendar和GregorianCalendar类的使用方法,包括如何设置日期、获取日期元素、进行日期计算及日期对象与时间对象之间的转换。

Calendar和GregorianCalendar日历类

  • Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。
  • GregorianCalendar 是 Calendar 的一个具体子类,提供了世界上大多数国家/地区使用的标准日历系统。
  • 注意月份的表示,一月是0,二月是1,以此类推,12月是11。因为大多数人习惯于使用单词而不是使用数字来表示月份,这样程序也许更易读,父类Calendar使用常量来表示月份:JANUARY, FEBRUARY,等等。

代码

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class TestCalendar {
    public static void main(String[] args) {
        Calendar calendar = new GregorianCalendar(2015, 11, 9, 11, 9, 50);
        Calendar calendar2 = new GregorianCalendar();
        // 设定日期
        calendar2.set(Calendar.YEAR, 2015);
        calendar2.set(Calendar.MONTH, 11);
        calendar2.set(Calendar.DATE, 9);
        calendar2.set(Calendar.HOUR_OF_DAY, 11);
        calendar2.set(calendar.MINUTE, 45);
        calendar2.set(calendar.SECOND, 34);
        // 得到相关的日期元素。
        int year = calendar2.get(Calendar.YEAR);
        int month = calendar2.get(Calendar.MONTH);
        int Date = calendar2.get(Calendar.DATE);
        // 日:Calendar.Date和Calendar.DAY_OF_MONTH同义。
        int hour = calendar2.get(Calendar.HOUR);
        int Minute = calendar2.get(Calendar.MINUTE);
        int ss = calendar2.get(Calendar.SECOND);
        int week = calendar2.get(Calendar.DAY_OF_WEEK);
        // 星期几 这里:1-7.周日是1,周一是2,,,,,周六是7
        System.out.printf("%d年%d月%d日,星期%d\n", year, month, Date, week);
        // 日期计算
        GregorianCalendar calendar3 = new GregorianCalendar(2015, 11, 9, 14, 55, 50);
        ;
        calendar3.add(Calendar.MONTH, -7);// 月份减7
        calendar3.add(Calendar.DATE, 7);// 增加7天
        printCalendar(calendar3);
        // 日历对象和时间对象转化。
        Date d = calendar3.getTime();
        long millSecond = calendar3.getTimeInMillis();
        Date date2 = new Date();
        GregorianCalendar calendar4 = new GregorianCalendar();
        calendar4.setTime(date2);

long g = System.currentTimeMillis();
        printCalendar(calendar4);
    }

public static void printCalendar(Calendar calendar) {
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH) + 1;
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        int day2 = calendar.get(Calendar.DATE);
        // 日:Calendar.Date和Calendar.DAY_OF_MONTH
        int date = calendar.get(Calendar.DAY_OF_WEEK) - 1;// 星期几
        String week = "" + ((date == 0) ? "日" : date);
        System.out.printf("%d年%d月%d日,星期%s\n", year, month, day, week);
    }
}
### Java 中 `Calendar` 类的使用方法 #### 获取 `Calendar` 实例 由于 `Calendar` 是一个抽象类,无法直接实例化。通常情况下,会通过静态工厂方法 `getInstance()` 来获得其实现类的对象,这个对象通常是 `GregorianCalendar` 的实例[^3]。 ```java // 创建 Calendar 对象 Calendar calendar = Calendar.getInstance(); ``` #### 设置日期时间 可以通过 `set(int year, int month, int date)` 方法来设定具体的年份、月份以及日子。需要注意的是,在 `Calendar` 类中,月份是从 0 开始计数的,即 0 表示一月,11 表示十二月[^4]。 ```java calendar.set(2022, Calendar.MARCH, 10); // 设定为 2022 年 3 月 10 日 ``` #### 查询特定字段值 利用 `get(int field)` 或者更推荐的方式是使用 `getTimeInMillis()` 结合其他工具类来进行更加精确的时间戳计算。对于获取某个月的最大天数,则可以采用 `getActualMaximum(int field)` 函数。 ```java int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); System.out.println("Day of Month: " + dayOfMonth); int lastDayOfMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); System.out.println("Last Day of This Month: " + lastDayOfMonth); ``` #### 修改日期组件 除了简单的读取外,还可以修改某个部分而不影响其它部分的数据。比如增加一个月: ```java calendar.add(Calendar.MONTH, 1); // 向前推进一个月 ``` 或者调整时间为当前时刻之后的一周: ```java calendar.roll(Calendar.WEEK_OF_YEAR, true); // 不改变较大的单位(如月份),仅滚动一周 ``` 以上就是关于 `Calendar` 类的一些基础操作说明及其应用案例[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值