Java时间类从此变得清晰明了
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类我们需要掌握:
- new Date() 可以获取到系统时间
- 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类我们需要掌握:
- get()方法 获取到时间的某一部分
- set()方法 设置时间 - -> 计算时间:系统已经帮我们设置好了,不用担心二月有多少天等问题,计算时间十分方便
- getTime()方法,得到的是一个Date类型的实例
- 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时间类从此变得清晰明了的更多相关文章
- java时间类简单总结
java时间类(Data类) 1.Data类(没有考虑到国际化,好多方法已过时java.util.Data包中) 父类(是类不是接口含有直接子类3个): 日期格式为:年月日时分秒(不包含毫秒部分) ...
- java时间类Date、Calendar及用法
对于时间类,这篇主要说明各种现实情况下如何取值,怎么定向取值,得到自己想要的时间参数.在java中时间类主要有Date.Calendar,暂时只介绍 java.util.*下的时间类,对于java.s ...
- Java时间类总结
java.util.Date 包含有年月日时分秒,精确到毫秒级别. 官方解释: // The class Date represents a specific instant in time, wit ...
- Java 时间类
1.System 类 2.Date 类 3.SimpleDateFormate 类 4.Calendar 类 1.System 类 得到当前的时间值.System 类不能被实例化,需要通过它的静态方法 ...
- Java 时间类-Calendar、Date、LocalDate/LocalTime
1.Date 类 java.util.Date是一个"万能接口",它包含日期.时间,还有毫秒数,如果你只想用java.util.Date存储日期,或者只存储时间,那么,只有你知道哪 ...
- Java时间类(转)
package com.chinagas.common.utils; import java.text.ParseException; import java.text.SimpleDateForma ...
- Java 时间类 Date 和 Calendar
在项目中获取一个yyyy-MM-dd HH:mm:ss格式的时间字符串 package org.htsg.kits; import java.text.SimpleDateFormat; import ...
- Java中常见时间类的使用
模拟场景针对于常用的操作API,比如流操作(字符流.字节流),时间操作等,仅仅了解概念性的定义终究是无法了解该类的用途和使用方式:这种情况在使用的时候便一脸茫然,脑海中映射不到对应的知识点.本篇博客将 ...
- Java Calendar类使用总结
平时在浏览一些网站时,有些网站会显示出当前时间,如现在是xx年xx月xx日 xx时xx分xx秒,在实际的开发过程中,也会涉及到日期和时间的计算,Java中提供了一个专门的类Calendar来处理日期与 ...
随机推荐
- centos8添加中文语言包
centos8添加中文语言包 系统:centos8 查看: [root@centos8]# locale -a 不支持中文包,按照centos7的方式安装:yum install kde-l10n-C ...
- [心得体会]mysql复习
1. 进入企业需要注意的事情 (1) 查看测试服和本地的mysql版本是否一致(2) 确认sql_mode是否和线上版本一致 show VARIABLES LIKE 'sql_mode'; (3) m ...
- Shell中[和[[的异同
1. 概念上来说 "[[",是关键字,许多shell(如ash bsh)并不支持这种方式.ksh, bash(据说从2.02起引入对[[的支持)等支持."[&qu ...
- Hibernate中用到联合主键的使用方法,为何要序列化,为何要重写hashcode 和 equals 方法
联合主键用Hibernate注解映射方式主要有三种: 第一.将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,再将该类注解为 ...
- sscanf功能详解(转)
#include <stdio.h> #include <stdlib.h> #include <string.h> static void sscanf_test ...
- ESP32-简单OTA升级
基于ESP-IDF4.1 1 #include "freertos/FreeRTOS.h" 2 #include "freertos/task.h" 3 #in ...
- JSP核心技术
一.JSP基本概念 JSP是Java Server Page 的简称,跟Servlet 一样可以动态生成HTML响应,文件命名为XXX.jsp JSP 与Servlet 的区别: jsp经编译后就变成 ...
- MySQL数据库性能优化该如何入手
今天小杨给大家分享一篇关于数据库查询优化,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情. ...
- SpringMvc接受请求参数的几种情况演示
说明: 通常get请求获取的参数是在url后面,而post请求获取的是请求体当中的参数.因此两者在请求方式上会有所不同. 1.直接将接受的参数写在controller对应方法的形参当中(适用于get提 ...
- 两万字Vue.js基础学习笔记
Vue.js学习笔记 目录 Vue.js学习笔记 ES6语法 1.不一样的变量声明:const和let 2.模板字符串 3.箭头函数(Arrow Functions) 4. 函数的参数默认值 5.Sp ...