平时在浏览一些网站时,有些网站会显示出当前时间,如现在是xx年xx月xx日 xx时xx分xx秒,在实际的开发过程中,也会涉及到日期和时间的计算,Java中提供了一个专门的类Calendar来处理日期与时间。

接下来就讲解下Calendar类的使用场景及使用方法。

1.获取Calendar实例

首先,我们看下Calendar类的定义

public abstract class Calendar implements Serializable, Cloneable, Comparable<Calendar>

因为被定义为abstract,所以我们无法通过new来创建Calendar类的实例,不过Calendar类提供了一个类方法getInstance()来返回Calendar的实例。

public static Calendar getInstance()
{
return createCalendar(TimeZone.getDefault(), Locale.getDefault(Locale.Category.FORMAT));
}

由此,获取Calendar实例的代码如下所示:

Calendar calendar = Calendar.getInstance();

2.获取当前时间

package com.zwwhnly.springbootdemo;

import java.util.Calendar;

public class CalendarDemo {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance(); int year = calendar.get(Calendar.YEAR);
// 月份的下标是从0开始的,即0~11分别代表1~12月,因此需要+1
int month = calendar.get(Calendar.MONTH) + 1;
int day = calendar.get(Calendar.DAY_OF_MONTH);
int hour = calendar.get(Calendar.HOUR_OF_DAY); // 24小时制
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND); System.out.println("现在是:" + year + "年" + month + "月" + day + "日" + hour + "时" + minute + "分" + second + "秒");
}
}

运行结果:

现在是:2019年2月21日15时36分38秒

注意:月份的下标是从0开始的,即011分别代表112月

3.设置时间

假设我们现在需要将时间设置为2019-02-21 23:59:59

3.1(一起设置):

Calendar calendar = Calendar.getInstance();
calendar.set(2019, Calendar.FEBRUARY, 21, 23, 59, 59); System.out.println(calendar.getTime());

3.2(分别设置):

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, 2019);
calendar.set(Calendar.MONTH, Calendar.FEBRUARY);
calendar.set(Calendar.DAY_OF_MONTH, 21);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59); System.out.println(calendar.getTime());

3.1和3.2的运行结果都如下所示:

Thu Feb 21 23:59:59 CST 2019

4.时间计算

4.1增加秒

我们在3.1的基础上增加1秒,那么时间应该是2019-02-22 00:00:00

public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
calendar.set(2019, Calendar.FEBRUARY, 21, 23, 59, 59);
calendar.add(Calendar.SECOND, 1);
System.out.println(calendar.getTime());
}

运行结果:

Fri Feb 22 00:00:00 CST 2019

4.2增加月

首先我们将时间设置为2019-01-31,然后先增加1个月,再增加2个月

Calendar calendar = Calendar.getInstance();

calendar.set(2019, Calendar.JANUARY, 31);
System.out.println(calendar.getTime());
calendar.add(Calendar.MONTH, 1);
System.out.println(calendar.getTime());
calendar.add(Calendar.MONTH, 2);
System.out.println(calendar.getTime());

运行结果:

Thu Jan 31 15:58:03 CST 2019

Thu Feb 28 15:58:03 CST 2019

Sun Apr 28 15:58:03 CST 2019

注意事项:当所在的月份没有那个日期时,如2月份没有31号,返回的是所在月的最后一天(2月28号)

5.扩展:获取某月的第一天和最后一天

package com.zwwhnly.springbootdemo;

import java.text.SimpleDateFormat;
import java.util.Calendar; public class CalendarDemo {
public static void main(String[] args) {
System.out.println(getFirstDayOfMonth(2019, 2));
System.out.println(getLastDayOfMonth(2019, 2)); System.out.println(getFirstDayOfMonth(2019, 3));
System.out.println(getLastDayOfMonth(2019, 3));
} public static String getLastDayOfMonth(int year, int month) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month - 1);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DATE)); return new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime());
} public static String getFirstDayOfMonth(int year, int month) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month - 1);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getMinimum(Calendar.DATE)); return new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime());
}
}

运行结果:

2019-02-01

2019-02-28

2019-03-01

2019-03-31

6.参考链接

Java中Calendar类的常用方法

Java Calendar类的使用总结

java时间类Date、Calendar及用法

原创不易,如果觉得文章能学到东西的话,欢迎点个赞、评个论、关个注,这是我坚持写作的最大动力。

如果有兴趣,欢迎添加我的微信:zwwhnly,等你来聊技术、职场、工作等话题(PS:我是一名奋斗在上海的程序员)。

Java Calendar类使用总结的更多相关文章

  1. Java Calendar 类的时间操作

    Java Calendar 类的时间操作 标签: javaCalendar时间Date 2013-07-30 17:53 140401人阅读 评论(7) 收藏 举报 分类: 所有(165) Java ...

  2. Java Calendar类的使用总结【转】

    感谢!原文地址:https://www.cnblogs.com/huangminwen/p/6041168.html Java Calendar类的使用总结 在实际项目当中,我们经常会涉及到对时间的处 ...

  3. Java Calendar类的使用总结

    在实际项目当中,我们经常会涉及到对时间的处理,例如登陆网站,我们会看到网站首页显示XXX,欢迎您!今天是XXXX年....某些网站会记录下用户登陆的时间,比如银行的一些网站,对于这些经常需要处理的问题 ...

  4. Java - Calendar类的使用

    今天在写代码时需要用到时间相关的类,一开始,数据库中存的数据类型是timestamp的,所以在Java中就使用了 Timestamp类型,但当调用Timestamp类型的方法时发现,它的很多方法都是d ...

  5. java Calendar类得到每个月的周末是几号的工具方法

    public static List getWeekendInMonth(int year, int month) { List list = new ArrayList(); Calendar ca ...

  6. Java Calendar 类的时间操作.RP

    JavaCalendar 类时间操作,这也许是创建和管理日历最简单的一个方案,示范代码很简单. 演示了获取时间,日期时间的累加和累减,以及比较. 原文地址:blog.csdn.NET/joyous/a ...

  7. Java Calendar类(java.util包)

    Date 类最主要的作用就是获得当前时间,同时这个类里面也具有设置时间以及一些其他的功能,但是由于本身设计的问题,这些方法却遭到众多批评,不建议使用,更推荐使用 Calendar 类进行时间和日期的处 ...

  8. Java Calendar类总结

    在实际项目当中,我们经常会涉及到对时间的处理,例如登陆网站,我们会看到网站首页显示XXX,欢迎您!今天是XXXX年....某些网站会记录下用户登陆的时间,比如银行的一些网站,对于这些经常需要处理的问题 ...

  9. Java Calendar类简单用法

    我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3832307.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...

随机推荐

  1. Python从入门到放弃

    计算机基础 01 计算机基础之编程 02 计算机组成原理 03 计算机操作系统 04 编程语言分类 Python解释器 05 Python和Python解释器 06 执行Python程序的两种方式 0 ...

  2. 手把手学会MySql主从配置

    001 开启二进制日志. vi /data/mysql/port-3306/my.cnf log-bin=mysql-bin 002 在master上为从主机新建一个专门用于同步的账户,并授权REPL ...

  3. [区块链\理解BTCD源码]GO语言实现一个区块链原型

    摘要 本文构建了一个使用工作量证明机制(POW)的类BTC的区块链.将区块链持久化到一个Bolt数据库中,然后会提供一个简单的命令行接口,用来完成一些与区块链的交互操作.这篇文章目的是希望帮助大家理解 ...

  4. [Hyperledger] Fabric系统中 peer模块的 gossip服务详解

    最近一直在看fabric系统中的核心模块之一——peer模块.在看peer的配置文件core.yaml的信息时,对其中的gossip配置选项很感兴趣.看了一上午,还是不能明白这个选项到底什么意思呢?表 ...

  5. 学习 JavaScript (五)核心概念:语句

    语句 语句被称作是流控制语句,通常有标志性的一个或者多个关键字,if . do-while. while.for. for-in. label. break.continue.with.switch. ...

  6. 学习JVM是如何从入门到放弃的?

    前言 只有光头才能变强 JVM在准备面试的时候就有看了,一直没时间写笔记.现在到了一家公司实习,闲的时候就写写,刷刷JVM博客,刷刷电子书. 学习JVM的目的也很简单: 能够知道JVM是什么,为我们干 ...

  7. Mybatis插入数据返回主键ID

    <insert id="add" parameterType="com.dsa.core.base.model.ProductSync">      ...

  8. Yii2设计模式——静态工厂模式

    应用举例 yii\db\ActiveRecord //获取 Connection 实例 public static function getDb() { return Yii::$app->ge ...

  9. Github排序(转载)

    目录 1. 冒泡排序 2. 选择排序 3. 插入排序 4. 希尔排序 5. 归并排序 6. 快速排序 7. 堆排序 8. 计数排序 9. 桶排序 10. 基数排序 参考:https://mp.weix ...

  10. SQL Server 安装后部分选项初始化脚本

    SQL Server安装后,根据对应的业务场景,数据库实例的部分选项需要调整,例如实例的最大内存.tempdb 文件的增长量.Job执行记录数等等,但这一步经常被大家忽略掉. 其实很多选项初始化都可以 ...