Java时间类

Java时间类分为Date 日期类和Calendar 日历类,相信很多小伙伴在初学时会对这个两个类的用法、区别以及有什么联系会感到疑惑,似乎懂了,但又不能具体说清,今天再带你来清晰的再次认识它俩!

Date 类

为了更直观了解,话不多说,直接上代码

【参考代码】

package date;

import java.util.Date;

public class Test {
public static void main(String[] args) { Date d = new Date(); // 系统时间——运行程序时的时间
System.out.println(d); // Fri Aug 13 08:03:49 CST 2021 //使用Date类中对应的get方法用来获取具体时间:年月日,时分秒
System.out.println(d.getYear() + 1900);// 年
System.out.println(d.getMonth()+1);// 月
System.out.println(d.getDate());// 日
System.out.println(d.getHours());// 时
System.out.println(d.getMinutes());// 分
System.out.println(d.getSeconds());// 秒 //Date类常用方法getTime();
//getTime()——获取到时间的毫秒形式 返回的是long
System.out.println(d.getTime());// 1628813591697 }
}

输出结果:

Fri Aug 13 08:13:11 CST 2021

2021

8

13

8

13

11

1628813591697

注:年份是从1900年开始的;月份是从0开始的。

Markdown代码块里是不显示删除线的,这里截图给大家。通过上述get方法,Date类可以获取具体时间,不过,这些函数的 API 不易于实现国际化,官方不再推荐使用Date类来获取时间,推荐使用Calendar类。因此,这里删除线代表可以用但不推荐。

总结:对于Date类我们需要掌握:

  1. new Date() 可以获取到系统时间
  2. getTime() 能获取到时间的long形式,可以用来计算时间差

Calendar类

上面我们已经知道Date类不再推荐用来获取时间,而是推荐Calendar类,话不多说直接上代码

注:Calendar 日历类,是一个抽象类,里边提供了很多操作日历字段的方法如:YEAR、 MONTH、 DAY OF MONTH、HOUR。因此不可以去new对象。虽然抽象类不能创建对象,但是jdk官方提供了一个实例对象的操作:

​ Calendar cal = Calendar.getInstance();

我们通过这条代码就是直接造了一个Calender的对象

【参考代码】

package date;
import java.util.Calendar;
import java.util.Date; public class TestCalendar {
public static void main(String[] args) { Calendar cal = Calendar.getInstance();// 实例化对象 System.out.println(cal);//java.util.GregorianCalendar[time=1628815192318,areFieldsSet=true,....] //用Calendar类get方法来获取具体时间
System.out.println(cal.get(Calendar.YEAR));// 年 2021
System.out.println(cal.get(Calendar.MONTH)+1);// 8月 月份从0开始
System.out.println(cal.get(Calendar.DATE));// 日
System.out.println(cal.get(Calendar.HOUR));// 时
System.out.println(cal.get(Calendar.MINUTE));// 分
System.out.println(cal.get(Calendar.SECOND));// 秒 //用Calendar类set方法设置时间--->用于计算
cal.set(Calendar.YEAR, cal.get(Calendar.YEAR)+10);// 十年以后 2031
System.out.println(cal.get(Calendar.YEAR));
cal.set(Calendar.MONTH,cal.get(Calendar.MONTH)+4);// 3月以后 11 月份从0开始的
System.out.println(cal.get(Calendar.MONTH));
//...同理日,时分秒都可以设置并计算 }
}

输出结果:

java.util.GregorianCalendar[time=1628815192318,areFieldsSet=true,....]

2021 // 年

8 // 月

13 // 日

9

5

22

2031 // 十年以后

11 //3月以后

【参考代码】

Calendar cal = Calendar.getInstance();// 实例化对象

get()方法解释:
get(你想获取的Canendar对象的信息)
例:cal.get(Calendar.YEAR);// 获取年份 set()方法解释:
set(需要设置的Calendar对象,获取该对象你需要信息)--->设置就可以用来计算
例:
cal.set(Calendar.YEAR, cal.get(Calendar.YEAR)+10);// 计算十年以后
System.out.println(cal.get(Calendar.YEAR));

Date类和Calendar类相互转换:

Date类和Calendar类既然有联系那必然可以相互转换,下面这段代码让大家更直观的了解:

【参考代码】

Date d = new Date();
System.out.println(d); Calendar cal = Calendar.getInstance();//实例化对象
cal.getTime();
System.out.println(cal.getTime());
/*
输出结果:
Fri Aug 13 09:35:45 CST 2021
Fri Aug 13 09:35:45 CST 2021
*/

Calendar实例化的对象.getTime()就能获取到当前的系统时间,即一个Date对象,也就是Date d==cal.getTime();

Calendar类转成了Date类

   Calendar cal = Calendar.getInstance();
Date d = cal.getTime();

Date类转成了Calendar类

    Date date = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);

总结:对于Calendar类我们需要掌握:

  1. get()方法 获取到时间的某一部分
  2. set()方法 设置时间 - -> 计算时间:系统已经帮我们设置好了,不用担心二月有多少天等问题,计算时间十分方便
  3. getTime()方法,得到的是一个Date类型的实例
  4. setTime()方法,将Date类型的实例给到Calendar类

格式化时间

通过上面的学习,我们知道Date,Calendar类通过引用可以进行时间的格式化,将年月日、时分秒一个个例举出来,可见比较繁琐,而SimpleDateFormat类是专门帮我们格式化时间的工具类,format()方法 和 parse()方法 能够帮我们在时间和字符串之间相互转换,十分方便。它在java.text包中。

时间转成字符串:format(Date date)方法

format(Date) 帮我们把时间转成字符串,格式化时间。字符串的格式为SimpleDateFormat类定义对象时设置的时间格式

【时间格式】:yyyy-MM-dd HH:mm:ss

【参考代码】

package Simple;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.SimpleFormatter; public class Test {
public static void main(String[] args) {
Date d = new Date();
System.out.println(d); //Thu Aug 12 08:40:08 CST 2021 不美观 //设置格式化时间的模式,我们常用yyyy-MM-dd HH:mm:ss这个字符串模式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 时间格式
String s = sdf.format(d); // 格式化时间
System.out.println(s); // 2021-08-12 08:45:09
}
}

字符串转成时间:parse(String string)方法

【参考代码】

package Simple;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner; public class Test2 {
public static void main(String[] args) throws ParseException { Scanner sc = new Scanner(System.in);
System.out.println("请输入一个时间(yyyy-MM-dd HH:mm:ss):");
String s = sc.nextLine(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = sdf.parse(s); // 把字符串转成时间
System.out.println(d); //Thu Aug 12 12:25:21 CST 2021 }
}

程序执行,输入和输出结果如下:

请输入一个时间(yyyy-MM-dd HH:mm:ss):

2021-08-12 12:25:21

Thu Aug 12 12:25:21 CST 2021

总结

看到这里,相信各位看官都对Java中的时间类的知识和使用有了一定了解,感谢各位看到这里!愿你韶华不负,青春无悔!

注: 由于自己刚刚开始学习Java不久,语言文字描述、技术等各方面还不是很好,如果文章有任何错误和建议,请各位大佬尽情评论留言!如果这篇文章对你有些许帮助,希望可爱亲切的您点个赞推荐一手,非常感谢啦!

Java时间类从此变得清晰明了的更多相关文章

  1. java时间类简单总结

    java时间类(Data类) 1.Data类(没有考虑到国际化,好多方法已过时java.util.Data包中) 父类(是类不是接口含有直接子类3个):  日期格式为:年月日时分秒(不包含毫秒部分) ...

  2. java时间类Date、Calendar及用法

    对于时间类,这篇主要说明各种现实情况下如何取值,怎么定向取值,得到自己想要的时间参数.在java中时间类主要有Date.Calendar,暂时只介绍 java.util.*下的时间类,对于java.s ...

  3. Java时间类总结

    java.util.Date 包含有年月日时分秒,精确到毫秒级别. 官方解释: // The class Date represents a specific instant in time, wit ...

  4. Java 时间类

    1.System 类 2.Date 类 3.SimpleDateFormate 类 4.Calendar 类 1.System 类 得到当前的时间值.System 类不能被实例化,需要通过它的静态方法 ...

  5. Java 时间类-Calendar、Date、LocalDate/LocalTime

    1.Date 类 java.util.Date是一个"万能接口",它包含日期.时间,还有毫秒数,如果你只想用java.util.Date存储日期,或者只存储时间,那么,只有你知道哪 ...

  6. Java时间类(转)

    package com.chinagas.common.utils; import java.text.ParseException; import java.text.SimpleDateForma ...

  7. Java 时间类 Date 和 Calendar

    在项目中获取一个yyyy-MM-dd HH:mm:ss格式的时间字符串 package org.htsg.kits; import java.text.SimpleDateFormat; import ...

  8. Java中常见时间类的使用

    模拟场景针对于常用的操作API,比如流操作(字符流.字节流),时间操作等,仅仅了解概念性的定义终究是无法了解该类的用途和使用方式:这种情况在使用的时候便一脸茫然,脑海中映射不到对应的知识点.本篇博客将 ...

  9. Java Calendar类使用总结

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

随机推荐

  1. SpringBoot Validation优雅的全局参数校验

    前言 我们都知道在平时写controller时候,都需要对请求参数进行后端校验,一般我们可能会这样写 public String add(UserVO userVO) { if(userVO.getA ...

  2. jenkins pipeline构建后发送邮件通知

    jenkins pipeline构建后发送邮件通知 mail配置 进入系统配置 找到最下边的邮件通知 创建任务 Pipeline片段 post { always { bat "" ...

  3. Docker:redis容器使用redis.conf启动失败,不报错

    查看redis.conf配置信息 daemonize no :redis默认是不作为守护进程使用的,这也就是说为什么在你不修改配置文件时直接使用redis-server /redis/redis.co ...

  4. Hibernate框架(三)框架中的关系映射

    在设计数据库时我们会考虑,表与表之间的关系,例如我们前边经常提到的一对一,一对多,多对多关系,在数据库中我们通过外键,第三张表等来实现这些关系.而Hibernate时间实体类和数据库中的表进行的映射, ...

  5. ESP32-使用有刷直流电机笔记

    基于ESP-IDF4.1 1 /* 2 * 刷直流电动机控制示例,代码通过L298电机芯片测试 3 */ 4 5 #include <stdio.h> 6 7 #include " ...

  6. MYSQL_Join注入技巧

    Join注入技巧 join无名列报错注入 约束条件 在知到表名的前提下才能操作 注入语句 and extractvalue(1,concat(0x7e,(select * from (select * ...

  7. 『心善渊』Selenium3.0基础 — 30、UI自动化测试之POM设计模式

    目录 (一)POM模式介绍 1.什么是POM介绍 2.为什么要使用POM模式 3.POM的优势 4.POM模式封装思路 (1)POM模式将页面分成三层 (2)POM模式的核心要素(重点) (3)总结 ...

  8. java基础---类和对象(3)

    一.Object类 java.lang.Object类是Java语言中类层次结构的根类,也就是说任何一个类都是该类的直接或者间接子类 如果定义一个Java类时没有使用extends关键字声明其父类,则 ...

  9. BiPredicate的test()方法

    /** * BiPredicate的test()方法接受两个参数,x和y,具体实现为x.equals(y), * 满足Lambda参数列表中的第一个参数是实例方法的参数调用者,而第二个参数是实例方法的 ...

  10. SLAM的数学基础(4):先验概率、后验概率、贝叶斯准则

    假设有事件A和事件B,可以同时发生但不是完全同时发生,如以下韦恩图所示: 其中,A∩B表示A和B的并集,即A和B同时发生的概率. 如此,我们很容易得出,在事件B发生的情况下,事件A发生的概率为: 这个 ...