一文教你使用Java Calendar类进行日期计算

 更新时间:2023年10月18日 09:01:30   作者:bug菌  
在日常开发中,我们常常需要进行日期计算,比如计算两个日期之间的天数、月数,在Java中,我们可以使用Java Calendar类来进行日期计算,下面就跟随小编一起来学习一下吧

环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8

前言

在日常开发中,我们常常需要进行日期计算。比如计算两个日期之间的天数、月数,或者给指定日期加上或减去一定的天数。在Java中,我们可以使用Java Calendar类来进行日期计算。本文将从基础开始,一步一步地介绍Java Calendar类的使用方法,带你轻松掌握日期计算技巧。

摘要

本文将介绍以下内容:

  • Calendar类介绍
  • 应用场景
  • 优缺点分析
  • 如何获取当前日期?
  • 如何设置日期?
  • 如何进行日期计算?
  • Calendar类常用方法介绍
  • 测试用例

Java Calendar类

概述

Java Calendar类是一个抽象类,提供了许多用于处理日期和时间的方法。它是日历类的抽象表示,可以将特定的日期转换为Unix时间戳,并进行日期计算。Calendar类是Java日期时间API的一部分,它可以处理从公元1年1月1日到当前日期的所有日期。

应用场景

由于Java Calendar类是一个抽象类,其提供了对日期和时间进行计算、比较、输出等基本操作的方法,应用场景包括:

  • 日历应用:可以使用Calendar类来创建一个日历应用程序,展示当前日期、月份、年份、节假日等信息,同时支持用户进行日期调整和日程安排等操作。
  • 任务调度:Calendar类可以用于实现任务调度功能,例如每周定时执行某个任务、每月执行某个任务等,可以通过设置定时器来实现。
  • 数据处理:在一些需要进行大量日期运算的数据处理场景中,可以使用Calendar类来计算两个日期之间的间隔、判断两个日期是否相等、比较日期先后顺序等。
  • 时间转换:在不同的国家和地区中,时间的表示方式不同,例如用12小时制还是24小时制,用AM还是PM表示上午和下午等。使用Calendar类可以很方便地进行时间转换,将日期和时间以指定的格式输出。
  • ... ....

优缺点

Java Calendar类是Java标准库中用于处理日期和时间的类,其优点和缺点如下:

优点:

  • 提供了丰富的日期和时间操作方法,可以满足多种需求。
  • 可以处理时区、夏令时等复杂的时间问题。
  • 可以处理更多的日期时间格式化规则,例如:针对不同区域的不同日期时间格式化规则。

缺点:

  • Calendar类是一个重量级的类,占用内存较大。
  • 由于历史原因,Calendar类中存在一些设计缺陷,例如:月份从0开始计数、星期从1开始计数等,这些设计缺陷容易引起程序员的困惑和错误。
  • Calendar类的API较为繁琐,使用起来比较麻烦。
  • Calendar类在处理闰秒等特殊情况时存在一些问题,可能会导致程序的不稳定性。

虽然Java Calendar类提供了强大的日期和时间处理功能,但由于其存在设计缺陷和API复杂等问题,在使用时需要谨慎考虑,并且推荐使用一些开源的日期时间操作库(如Joda-Time库)来替代。

常用方法介绍

Java中的Calendar类是用于处理日期和时间的抽象类,它提供了很多常用的日期和时间处理方法。

方法描述
add()在指定的日期上增加或减少指定的年、月、日、小时、分钟、秒等时间值。
roll()在指定的日期上增加或减少指定的年、月、日、小时、分钟、秒等时间值,但不会影响到更高的时间单位。
setTime(Date date)使用给定的Date设置此Calendar的时间
getTime()获取Calendar对象对应的Date对象。
set(int field, int value)设置指定的年、月、日、小时、分钟、秒等时间值。
add(int field, int amount)根据日历规则,将指定的时间量添加或减去给定的日历字段
get(int field)获取指定的年、月、日、小时、分钟、秒等时间值。
setLenient(boolean lenient)指定宽松的解析
setTimeZone(TimeZone value)为此Calendar设置时区。
getActualMinimum()获取指定时间单位(年、月等)的最小值。
getDisplayName()获取指定时间单位的显示名称。
getInstance()获取默认时区的Calendar对象

实例演示

如何获取当前日期?

我们可以使用getInstance()方法获取一个Calendar对象,该对象表示当前日期和时间。

示例如下:

    //获取当前日期
    public static void getNowDate(){
        Calendar now = Calendar.getInstance();
        System.out.println("当前时间为:" + now.getTime());
    }

输出结果如下:

当前时间为:Tue Oct 17 10:44:41 CST 2023

执行结果截图如下:

如何设置日期?

我们可以使用set()方法设置一个Calendar对象的日期或时间。

示例如下:

    //设置日期
    public static void setDate(){
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, 2023);
        calendar.set(Calendar.MONTH, 10);
        calendar.set(Calendar.DATE, 17);
        System.out.println(calendar.getTime());
    }

输出结果如下:

Fri Nov 17 10:55:57 CST 2023

执行结果截图如下:

如何进行日期计算?

我们可以使用add()方法对日期进行加减计算。

示例如下:

    //日期计算
    public static void CalculateDate() {
        Calendar calendar = Calendar.getInstance();
        System.out.println("当前时间为:" + calendar.getTime());

        calendar.add(Calendar.DATE, 10);
        System.out.println("加上10天后的时间为:" + calendar.getTime());

        calendar.add(Calendar.MONTH, -2);
        System.out.println("减去2个月后的时间为:" + calendar.getTime());

        calendar.add(Calendar.YEAR, 3);
        System.out.println("加上3年后的时间为:" + calendar.getTime());
    }

输出结果如下:

当前时间为:Tue Oct 17 10:56:43 CST 2023
加上10天后的时间为:Fri Oct 27 10:56:43 CST 2023
减去2个月后的时间为:Sun Aug 27 10:56:43 CST 2023
加上3年后的时间为:Thu Aug 27 10:56:43 CST 2026

执行结果截图如下:

测试用例

下面通过一个完整的测试用例来验证上述方法的正确性,请同学们参考

代码如下:

测试代码

package com.demo.javase.day52;

import java.util.Calendar;

/**
 * @author bug菌
 * @date 2023/10/17 10:44
 */
public class CalendarDemo {

    public static void main(String[] args) {
        Calendar now = Calendar.getInstance();
        System.out.println("当前时间为:" + now.getTime());

        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, 2023);
        calendar.set(Calendar.MONTH, 10);
        calendar.set(Calendar.DATE, 17);
        System.out.println("设置时间为:" + calendar.getTime());

        calendar.add(Calendar.DATE, 10);
        System.out.println("加上10天后的时间为:" + calendar.getTime());

        calendar.add(Calendar.MONTH, -2);
        System.out.println("减去2个月后的时间为:" + calendar.getTime());

        calendar.add(Calendar.YEAR, 3);
        System.out.println("加上3年后的时间为:" + calendar.getTime());

        System.out.println("年份为:" + calendar.get(Calendar.YEAR));
        System.out.println("月份为:" + calendar.get(Calendar.MONTH));
        System.out.println("日期为:" + calendar.get(Calendar.DATE));
    }
}

测试结果

运行结果如下:

当前时间为:Tue Oct 17 11:34:59 CST 2023
设置时间为:Fri Nov 17 11:34:59 CST 2023
加上10天后的时间为:Mon Nov 27 11:34:59 CST 2023
减去2个月后的时间为:Wed Sep 27 11:34:59 CST 2023
加上3年后的时间为:Sun Sep 27 11:34:59 CST 2026
年份为:2026
月份为:8
日期为:27

执行结果截图如下:

测试代码解析

如上是Java中Calendar类的使用示例。首先,通过Calendar.getInstance()方法获取当前时间,并输出当前时间;然后通过set()方法设置一个指定的时间,再通过add()方法来对时间进行加减操作。最后,通过get()方法获取对应的年、月、日等时间信息,并输出。

小结

本文介绍了Java Calendar类的基本用法,包括如何获取当前日期、如何设置日期、如何进行日期计算以及Calendar类常用方法介绍。掌握这些技巧之后,在日常开发中进行日期计算会更加得心应手。

以上就是一文教你使用Java Calendar类进行日期计算的详细内容,更多关于Java Calendar的资料请关注脚本之家其它相关文章!

相关文章

  • Eclipse中使用Maven创建Java Web工程的实现方式

    Eclipse中使用Maven创建Java Web工程的实现方式

    这篇文章主要介绍了Eclipse中使用Maven创建Java Web工程的实现方式的相关资料,希望通过本文能帮助到大家,让大家实现这样的方式,需要的朋友可以参考下
    2017-10-10
  • Java ArrayList底层方法的实现深度解析

    Java ArrayList底层方法的实现深度解析

    ArrayList是Java集合框架中List接口的动态数组实现,可以方便的存储和操作数据,这篇文章是进行ArrayList的一个自我实现,让我们从底层更深度地理解ArrayList(顺序表),感兴趣的朋友跟随小编一起看看吧
    2025-10-10
  • MyBatis-Plus自定义SQL的详细过程记录

    MyBatis-Plus自定义SQL的详细过程记录

    Java开发使用mybatis-plus来执行sql操作,往往比mybatis能够省时省力,下面这篇文章主要给大家介绍了关于MyBatis-Plus自定义SQL的相关资料,需要的朋友可以参考下
    2022-02-02
  • Java由浅入深分析多态的概念

    Java由浅入深分析多态的概念

    多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定
    2022-04-04
  • Java中的并发工具类详细解析

    Java中的并发工具类详细解析

    这篇文章主要介绍了Java中的并发工具类详细解析,CountDownLatch、 CyclicBarrier 和 Semaphore 工具类提供了一种并发流程控制的手段,Exchanger 工具类则提供了在线程间交换数据的一种手段,需要的朋友可以参考下
    2023-12-12
  • Java中大数据推荐算法使用场景分析

    Java中大数据推荐算法使用场景分析

    在Java中实现大数据推荐算法时,通常会使用一些开源的机器学习库,如Apache Mahout、Weka、DL4J(DeepLearning4j,用于深度学习)或者Spark MLlib(用于在Spark集群上运行),这篇文章主要介绍了Java中可以用的大数据推荐算法,需要的朋友可以参考下
    2024-06-06
  • Java实战之实现文件资料上传并生成缩略图

    Java实战之实现文件资料上传并生成缩略图

    这篇文章主要介绍了通过Java实现文件资料的上传并生成一个缩略图,文中的示例代码讲解详细,对我们学习Java有一定的帮助,感兴趣的小伙伴可以了解一下
    2021-12-12
  • Java中super和this的用法详解

    Java中super和this的用法详解

    这篇文章主要介绍了Java中super和this的用法详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • SpringBoot从繁至简的框架基础教程

    SpringBoot从繁至简的框架基础教程

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置
    2022-10-10
  • org.apache.zookeeper.KeeperException.BadVersionException异常的解决

    org.apache.zookeeper.KeeperException.BadVersionException异常的解

    在使用Apache ZooKeeper进行分布式协调时,你可能会遇到org.apache.zookeeper.KeeperException.BadVersionException异常,本文就来介绍一下解决方法,感兴趣的可以了解一下
    2024-03-03

最新评论