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来处理日期与 ...
随机推荐
- Defense:SMB协议漏洞利用与控制CVE-2017-7494("永恒之蓝")攻防实验
漏洞描述 1. 服务器打开了文件/打印机共享端口445,让其能够在公网上访问 2. 共享文件拥有写入权限 3. 恶意攻击者需猜解Samba服务端共享目录的物理路径 Samba是在Linux和UNIX系 ...
- Vue3 + TypeScript 开发实践总结
前言 迟来的Vue3文章,其实早在今年3月份时就把Vue3过了一遍.在去年年末又把 TypeScript 重新学了一遍,为了上 Vue3 的车,更好的开车.在上家公司4月份时,上级领导分配了一个内部的 ...
- 远程cmd操作
<<PSTools.zip>><<Install_PowerCmd.exe>><<cmder_mini.zip>><< ...
- external-resizer 源码分析/pvc 扩容分析
kubernetes ceph-csi分析目录导航 基于tag v0.5.0 https://github.com/kubernetes-csi/external-resizer/releases/t ...
- [TJOI2007]书架 题解
文中给了你一些句子,以及让你任意插入某个位置以及查询某个位置的句子. 发现因为是句子很难搞,所以开个 map 离散一下成数字.然后在额外开一个 map 记录这个数字对应的句子. 然后你要写一种支持插入 ...
- C语言:强制类型转换
#include <stdio.h> //强制类型转换 //写法:(类型标识符)变量:(类型标识符)常量:(类型标识符)(表达式):三种格式 main() { float a=7.5f; ...
- 夏壹队——nabcd
我们团队项目名称是TD校园通,无课表查询你作为主要功能,是一个亮眼的功能. 我们的无课表查询功能主要解决大家平时上自习还要到教学楼拍照,教室课程情况也有断更的时候,而这个功能就解决大家的这个功能,能够 ...
- 关于高校表白App的NABCD项目分析
N(Need,需求) 首先,针对本校男多女少 的具体情况,为广大本校大学生提供一个更加宽广的平台: 其次,针对当前各高校均有校园表白墙的实际情况,各表白墙难以整合在一起,使得信息不够集中的现状,我们小 ...
- java网络编程基础——网络基础
java网络编程 网络编程基础 1.常用的网络拓扑结构: 星型网络.总线网络.环线网络.树形网络.星型环线网络 2.通信协议的组成 通信协议通常由3部分组成: 语义部分:用于决定通信双方对话类型 语法 ...
- 【模拟+排序】花生采摘 luogu-1086
题目描述 鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:"欢迎免费品尝我种的花生!――熊字". 鲁宾逊先生和多多都很 ...