Java 中Calendar日历类的基本使用

简介: Java 中Calendar日历类的基本使用

Calendar介绍:

Calendar类为某一时刻和一组日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法。

Calendar提供了一个类方法getInstance用于获取Calendar对象,其日历字段已使用当前日期和时间初始化。

下面代码中给出Calendar类常用的方法,详细注释已经在代码中给出:

代码一:

public class CalendarDemo {
    public static void main(String[] args) {
        //获取Calendar对象
        Calendar calendar = Calendar.getInstance(); //多态的形式得到的对象
//        System.out.println(calendar);
        //public int get(int field)  返回给定日历字段的值
//        int year = calendar.get(Calendar.YEAR);
//        int month = calendar.get(Calendar.MONTH) + 1; //月份是从零开始的
//        int date = calendar.get(Calendar.DATE);
//        System.out.println(year + "年 " + month + "月 " + date + "日"); //2021年 11月 30日
        //需求1  3年前的今天
        //根据日历的规则,将指定的时间量添加或减去给定的日历字段
//        calendar.add(Calendar.YEAR,-3);
//        int year = calendar.get(Calendar.YEAR);
//        int month = calendar.get(Calendar.MONTH) + 1; //月份是从零开始的
//        int date = calendar.get(Calendar.DATE);
//        System.out.println(year + "年 " + month + "月 " + date + "日");//2018年 11月 30日
        //需求2  10年后的5天前
//        calendar.add(Calendar.YEAR, 10);
//        calendar.add(Calendar.DATE, -5);
//
//        int year = calendar.get(Calendar.YEAR);
//        int month = calendar.get(Calendar.MONTH) + 1; //月份是从零开始的
//        int date = calendar.get(Calendar.DATE);
//        System.out.println(year + "年 " + month + "月 " + date + "日");  //2031年 11月 25日
        //设置当前日历的年月日
        calendar.set(2025,11,30);
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH) + 1; //月份是从零开始的
        int date = calendar.get(Calendar.DATE);
        System.out.println(year + "年 " + month + "月 " + date + "日");  //2025年 12月 30日
    }
}

代码二:

public class Calendar_ {
    public static void main(String[] args) {
        //1.Calendar是一个抽象类,并且构造器是private
        //2.可以通过getInstance()来获取实例
        //3.提供大量的方法和字段给程序员
        //4.Calendar没有提供对应的格式化的类,因此需要程序员自己组合来输出(灵活)
        //5.如果我们需要按照24小时进制来获取时间,Calendar.HOUR--->Calendar.HOUR_OF_DAY
        Calendar calendar = Calendar.getInstance();//创建日历类对象
        System.out.println("calendar=" + calendar);
        //2.获取日历类对象的某个日历字段
        System.out.println("年:" + calendar.get(Calendar.YEAR));
        System.out.println("月:" + (calendar.get(Calendar.MONTH) + 1));
        System.out.println("日:" + calendar.get(Calendar.DAY_OF_MONTH));
        System.out.println("小时:" + calendar.get(Calendar.HOUR));
        System.out.println("分钟:" + calendar.get(Calendar.MINUTE));
        System.out.println("秒:" + calendar.get(Calendar.SECOND));
        System.out.println(calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-" + calendar.get(Calendar.DAY_OF_MONTH)
                + " " + calendar.get(Calendar.HOUR) + ":" + calendar.get(Calendar.MINUTE) + ":" + calendar.get(Calendar.SECOND)
        );
    }
}

输出结果如下:

calendar=java.util.GregorianCalendar[time=1647662681898,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2022,MONTH=2,WEEK_OF_YEAR=12,WEEK_OF_MONTH=3,DAY_OF_MONTH=19,DAY_OF_YEAR=78,DAY_OF_WEEK=7,DAY_OF_WEEK_IN_MONTH=3,AM_PM=1,HOUR=0,HOUR_OF_DAY=12,MINUTE=4,SECOND=41,MILLISECOND=898,ZONE_OFFSET=28800000,DST_OFFSET=0]
年:2022
月:3
日:19
小时:0
分钟:4
秒:41
2022-3-19 0:4:41

练习,获取任意年份2月份有多少天?

public class CalendarTest {
    public static void main(String[] args) {
        //键盘输入任意的年份
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入年份:");
        int year = sc.nextInt();
        Calendar calendar = Calendar.getInstance();
        //设置日历对象的年,月,日
        calendar.set(year, 2, 1);
        //3月1日往前推一天,就是2月的最后一天
        calendar.add(Calendar.DATE, -1);
        //获取这一天输出即可
        int day = calendar.get(Calendar.DATE);
        System.out.println(year + "年的2月份有" + day + "天");
    }
}

输出结果:


目录
相关文章
|
22小时前
|
网络协议 Java
Java中如何使用Socket类检测端口是否存在
Java中如何使用Socket类检测端口是否存在
12 4
|
22小时前
|
存储 缓存 前端开发
Java串口通信技术探究3:RXTX库线程 优化系统性能的SerialPortEventListener类
Java串口通信技术探究3:RXTX库线程 优化系统性能的SerialPortEventListener类
9 3
|
23小时前
|
存储 Java
Java的`java.io`包包含多种输入输出类
Java的`java.io`包包含多种输入输出类。此示例展示如何使用`FileInputStream`从`input.txt`读取数据。首先创建`FileInputStream`对象,接着分配一个`byte`数组存储流中的数据。通过`read()`方法读取数据,然后将字节数组转换为字符串打印。最后关闭输入流释放资源。`InputStream`是抽象类,此处使用其子类`FileInputStream`。其他子类如`ByteArrayInputStream`、`ObjectInputStream`和`BufferedInputStream`各有特定用途。
7 1
|
2天前
|
Java 开发者
Java中三种Set的实现类的用法和区别
Java中三种Set的实现类的用法和区别
|
2天前
|
消息中间件 安全 Java
在Spring Bean中,如何通过Java配置类定义Bean?
【4月更文挑战第30天】在Spring Bean中,如何通过Java配置类定义Bean?
9 1
|
3天前
|
Java
Java对象和类研究
Java对象和类研究
7 0
|
3天前
|
XML Java 测试技术
Java异常处理神器:Guava Throwables类概念与实战
【4月更文挑战第29天】在Java开发中,异常处理是保证程序稳定性和可靠性的关键。Google的Guava库提供了一个强大的工具类Throwables,用于简化和增强异常处理。本篇博客将探讨Throwables类的核心功能及其在实战中的应用。
12 2
|
5月前
|
Java
多线程与并发,Java中介绍一下Thread类和Runnable接口的区别。
多线程与并发,Java中介绍一下Thread类和Runnable接口的区别。
33 1
|
5月前
|
Java Unix 程序员
java 8 新特性讲解Optional类--Fork/Join 框架--新时间日期API--以及接口的新特性和注解
java 8 新特性讲解Optional类--Fork/Join 框架--新时间日期API--以及接口的新特性和注解
62 1
|
9天前
|
Java
一文搞清楚Java中的包、类、接口
包、类、接口、方法、变量、参数、代码块,这些都是构成Java程序的核心部分,即便最简单的一段代码里都至少要包含里面的三四个内容,这两天花点时间梳理了一下,理解又深刻了几分。
31 10