java的calendar如何使用_Calendar类

java的calendar如何使用_Calendar类java.util.java.util.Calendar 类是一个抽象类,是 java 日期处理的核心类之一。

JAVA中

这是我参与8月更文挑战的第27天,活动详情查看:8月更文挑战

文章目录

  • java.util.Calendar
    • 介绍
    • 创建对象
    • 方法
    • 举例:填写年月(yyyy-MM),显示当前日历

java.util.Calendar

介绍

Calendar 类是一个抽象类,是 java 日期处理的核心类之一。

创建对象

Calendar 类是一个抽象类,是不能实例化的,那么这个类得到一个日历实例的方法有这么两种:

1、因为是抽象方法,不能直接 new Calendar,但是可以 new 它的子类
Calendar c = new GregorianCalendar();

java.util.GregorianCalendar 是 Calendar 的子类,罗马历,即“公历”,“阳历”。

2、在中国地区,12两种方法相同,在某些地区,2可能会创建当地历法
Calendar c = Calendar.getInstance();

方法

今天是 2021年8月26日,我们来练习下 Calendar 的常用方法

1、getTime() 获得表示当前时间的 Date 类型实例

Calendar c = Calendar.getInstance();
System.out.println(c.getTime());

Thu Aug 26 17:16:02 CST 2021

Tips:如果想改变时间的展示格式,可以用我们上一章学到的 SimpleDateFormat 来格式化一下。

2、get(字段) 获得日期中指定字段的值

Calendar c = Calendar.getInstance();
System.out.println(c.get(Calendar.YEAR)); 输出:2021
System.out.println(c.get(Calendar.MONTH)); 输出:7
System.out.println(c.get(Calendar.DAY_OF_MONTH)); 输出:26

日历字段包含 YEAR、MONTH、DAY_OF_MONTH、HOUR 等,它们都是 Calendar 类的静态常量。我们使用 get() 方法就可得到。

注意点一:
现在是 8 月份,但我们看到 Calendar.MONTH 输出了 7,这是因为月份从 0 开始。所以实际中我们需要 +1。

这些字段从字面意思就能懂,更多字段可以查看 官方API

注意点二:
这里重点说一下 Calendar.DAY_OF_WEEK。Java 中 Calendar.DAY_OF_WEEK 其实表示:一周中的第几天,所以它会受到 第一天是星期几 的影响。

有些地区以星期日作为一周的第一天,而有些地区以星期一作为一周的第一天,这两种情况是需要区分的:

星期日为一周的第一天 SUN MON TUE WED THU FRI SAT
DAY_OF_WEEK返回值 1        2        3      4     5      6     7

星期一为一周的第一天 MON TUE WED THU FRI SAT SUN
DAY_OF_WEEK返回值 1         2       3       4     5     6     7

例如今天周五。

Calendar ca = Calendar.getInstance();
System.out.println(ca.get(Calendar.DAY_OF_WEEK)); 输出:6

3、set(字段,值) 设置年、月、日、时、分、秒、毫秒

可以修改指定字段的值

Calendar ca = Calendar.getInstance();
ca.set(Calendar.YEAR, 2019);
ca.set(Calendar.MONTH, 0);
ca.set(Calendar.DATE, 1);
ca.set(Calendar.HOUR_OF_DAY, 0);
ca.set(Calendar.MINUTE, 0);
ca.set(Calendar.SECOND, 0);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(ca.getTime())); 输出:2019-01-01 00:00:00

也可以同时设置年月日时分秒

Calendar ca = Calendar.getInstance();
ca.set(2019, 0, 1, 0, 0,0);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(ca.getTime())); 输出:2019-01-01 00:00:00

4、add(int field,int amount) 在指定字段上加一个值

		Calendar ca = Calendar.getInstance();
        ca.set(Calendar.YEAR, 2021);

        //当前日历年份加一,一年后的今天
        ca.add(Calendar.YEAR, 1);
        System.out.println(ca.get(Calendar.YEAR)); //2022

        //当前日历年份减一,去年今天
        ca.add(Calendar.YEAR, -1);
        System.out.println(ca.get(Calendar.YEAR)); //2020

我们可以通过 add 方法求 7 个月的最后一天是几号,当然后边有更简单的办法,这里只是练习使用这个方法 。

		Calendar calendar = Calendar.getInstance();
        //当前月份设置为8月,别忘了月份从0开始
        int currentMonth = 7;
        //设置8月1日
        calendar.set(calendar.get(Calendar.YEAR), currentMonth, 1);
        //8月1日减掉1天即为7月最后一天
        calendar.add(Calendar.DATE, -1);
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println("7月的最后一天为:" + day + "号");

5、compareTo(Calendar anotherCalendar)、after(Object when)、before(Object when)
与另一个时间比较大小
当前Calendar实例大,返回正数
当前Calendar实例小,返回负数
相同大小,返回 0

		Calendar cal1 = new GregorianCalendar(2022, 8, 27);
        Calendar cal2 = new GregorianCalendar(2015, 8, 15);

        int ret0 = cal1.compareTo(cal2);
        int ret1 = cal2.compareTo(cal1);

        System.out.println(ret0); // 1
        System.out.println(ret1); //-1

after()、before() 函数的含义通过字面意思也能猜出来,都返回的是 boolean 值,调用 after() 函数的时间在参数之后返回 true,否则 返回 false。before() 相反。

6、getActualMaximum(int field)

获得指定字段实际最大值,可以用来获得月中最大天数。

		Calendar ca = Calendar.getInstance();

        //返回当前月最大天数
        System.out.println(ca.getActualMaximum(Calendar.DAY_OF_MONTH));
        System.out.println(ca.getActualMaximum(Calendar.DATE));

        //返回23
        System.out.println(ca.getActualMaximum(Calendar.HOUR_OF_DAY));

        //返回11
        System.out.println(ca.getActualMaximum(Calendar.HOUR));

        //返回当前月有多少周,返回 5
        System.out.println(ca.getActualMaximum(Calendar.WEEK_OF_MONTH));

        //返回当前年度最大天数,返回 365
        System.out.println(ca.getActualMaximum(Calendar.DAY_OF_YEAR));

7、setTime(Date date)

setTime(Date date) 将时间设置为指定 Date 示例表示的时间

		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date date = sdf.parse("2015-08-15");
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(date);
            System.out.println(calendar.getTime()); 输出;Sat Aug 15 00:00:00 CST 2015
        } catch (ParseException e) {
            e.printStackTrace();
        }

8、getTimeMillis()、setTimeMillis(long millis)

这是毫秒值存取方法

Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTimeInMillis()); 输出:1630027313234
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(0);//转换成格林威治时间
System.out.println(calendar.getTime()); 输出:Thu Jan 01 08:00:00 CST 1970

9、clear()

clear() 在无参数的情况下是对对象中的所有变量进行清空,清空后的时间为

Thu Jan 01 00:00:00 CST 1970

clear() 也可以附带上参数int field,表示单单清除这个数值

		Calendar calendar = Calendar.getInstance();
        calendar.clear(Calendar.YEAR);
        System.out.println(calendar.getTime());

Thu Aug 27 09:30:14 CST 1970

举例:填写年月(yyyy-MM),显示当前日历

System.out.println("输入年月(yyyy-MM)");
        String s = new Scanner(System.in).nextLine();

        /* * 获取当前月1号是周几,需要用Calendar的方法 * 需把输入的字符串转成Calendar对象 */
        //2021-08-->Date-->Calendar
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
        Date d = null;
        try {
            d = sdf.parse(s);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        //新建Calendar对象,标识系统当前时间
        Calendar c = Calendar.getInstance();
        c.setTime(d);

        int week = c.get(Calendar.DAY_OF_WEEK);
        int max = c.getActualMaximum(Calendar.DAY_OF_MONTH);

        System.out.println("日\t一\t二\t三\t四\t五\t六");

        //计数变量,每7个换行1次
        int count = 0;
        //看是周几,然后前面先输入几个空格
        for (int i = 0; i < week - 1; i++) {
            System.out.print(" \t");
            count++;
        }

        for (int i = 1; i <= max; i++) {
            System.out.print(i + "\t");
            count++;

            if (count == 7) {
                System.out.println();
                count = 0;
            }
        }

运行结果
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13936.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注