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

咦咦咦,各位小可爱,我是你们的好伙伴------bug菌,今天又来给大家普及Java SE相关知识点之Calendar类,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯,别被干货淹没了哦~

🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎大家关注&&收藏!持续更新中,up!up!up!!


js 复制代码
环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8

前言

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

摘要

本文将介绍以下内容:

  1. Calendar类介绍
  2. 应用场景
  3. 优缺点分析
  4. 如何获取当前日期?
  5. 如何设置日期?
  6. 如何进行日期计算?
  7. Calendar类常用方法介绍
  8. 测试用例

Java Calendar类

概述

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

应用场景

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

  1. 日历应用:可以使用Calendar类来创建一个日历应用程序,展示当前日期、月份、年份、节假日等信息,同时支持用户进行日期调整和日程安排等操作。

  2. 任务调度:Calendar类可以用于实现任务调度功能,例如每周定时执行某个任务、每月执行某个任务等,可以通过设置定时器来实现。

  3. 数据处理:在一些需要进行大量日期运算的数据处理场景中,可以使用Calendar类来计算两个日期之间的间隔、判断两个日期是否相等、比较日期先后顺序等。

  4. 时间转换:在不同的国家和地区中,时间的表示方式不同,例如用12小时制还是24小时制,用AM还是PM表示上午和下午等。使用Calendar类可以很方便地进行时间转换,将日期和时间以指定的格式输出。

  5. ... ....

优缺点

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

优点:

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

缺点:

  1. Calendar类是一个重量级的类,占用内存较大。
  2. 由于历史原因,Calendar类中存在一些设计缺陷,例如:月份从0开始计数、星期从1开始计数等,这些设计缺陷容易引起程序员的困惑和错误。
  3. Calendar类的API较为繁琐,使用起来比较麻烦。
  4. 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对象,该对象表示当前日期和时间。

示例如下:

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

输出结果如下:

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

执行结果截图如下:

如何设置日期?

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

示例如下:

java 复制代码
    //设置日期
    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());
    }

输出结果如下:

java 复制代码
Fri Nov 17 10:55:57 CST 2023

执行结果截图如下:

如何进行日期计算?

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

示例如下:

java 复制代码
    //日期计算
    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

执行结果截图如下:

测试用例

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

代码如下:

测试代码

java 复制代码
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类常用方法介绍。掌握这些技巧之后,在日常开发中进行日期计算会更加得心应手。

附录源码

如上涉及所有源码均已上传同步在「Gitee」,提供给同学们一对一参考学习,辅助你更迅速的掌握。

总结

本文对Java Calendar类进行了全面的介绍,让读者能够轻松掌握日期计算技巧。希望读者能够在实际开发中加以运用,提高开发效率。

... ...

ok,以上就是我这期的全部内容啦,如果还想学习更多,你可以看看如下的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬。

「赠人玫瑰,手留余香」,咱们下期拜拜~~

☀️建议/推荐你

最后,如果这篇文章对你有所帮助,帮忙给作者来个一键三连,关注、点赞、收藏,您的支持就是我坚持写作最大的动力。
  同时欢迎大家关注公众号:「猿圈奇妙屋」 ,以便学习更多同类型的技术文章,免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板、技术文章Markdown文档等海量资料。

📣关于我

我是bug菌,CSDN | 掘金 | infoQ | 51CTO 等社区博客专家,历届博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,华为云 | 阿里云| 腾讯云等社区优质创作者,全网粉丝合计15w+ ;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等海量资料。


相关推荐
小码ssim12 分钟前
IntelliJ IDEA 2024.3(Ultimate Edition)免费化教学
java·ide·intellij-idea
qq_4298565720 分钟前
解决 idea windows 设置maven离线模式之后,maven继续请求远程仓库
java·maven·intellij-idea
ChinaRainbowSea27 分钟前
4. Spring Cloud Ribbon 实现“负载均衡”的详细配置说明
java·spring boot·后端·spring·spring cloud·ribbon·负载均衡
坟头种朵喇叭花33 分钟前
LinkedList与链表
java·数据结构·链表
清酒伴风(面试准备中......)34 分钟前
计算机网络HTTP——针对实习面试
java·笔记·网络协议·计算机网络·http·面试·实习
honvin_34 分钟前
常用List工具类(取交集、并集等等)
java·list·集合·工具类·list交集、并集工具类
2401_8532757335 分钟前
LinkedList 源码分析
java·面试·职场和发展
子非吾喵1 小时前
IDEA在设置里边更改了JDK版本没生效问题解决
java·ide·intellij-idea
陆业聪1 小时前
基本数据类型:Kotlin、Dart (Flutter)、Java 和 C++ 的比较
java·flutter·kotlin
程序修理员1 小时前
2个word内容合并
java·word