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来处理日期与 ...
随机推荐
- 深入学习Netty(1)——传统BIO编程
前言 之前看过Dubbo源码,Nacos等源码都涉及到了Netty,虽然遇到的时候查查资料,后面自己也有私下学习Netty并实践,但始终没有形成良好的知识体系,Netty对想要在Java开发上不断深入 ...
- css文字动画(自动换文字)
html: <div class="content"> <div class="content__container"> <p c ...
- RabbitMq脑裂问题
现象 部署在阿里云上的2台RabbitMQ主从,访问management页面时出现如下所示的内容: 查看其中一个mq的日志,发现如下内容: 00:06:32.423 [warning] <0.5 ...
- 在ubuntu16下编译openJDK11
为什么需要编译自己的jvm源码? 想象下, 你想看看java线程是如何start的? 去源码里一找 native void start0(), 此时如果你对jvm源码比较熟悉, 那么可以下载openJ ...
- Python字符串格式方式 %s format()
p.p1 { margin: 0; font: 12px ".PingFang SC" } p.p2 { margin: 0; font: 12px "Helvetica ...
- Linux环境Nginx安装、调试以及PHP安装(转)
linux版本:64位CentOS 6.4 Nginx版本:nginx1.8.0 php版本:php5.5 1.编译安装Nginx 官网:http://wiki.nginx.org/Install ...
- MySQL 删除devices表中id最大的一行
原想法:delete from devices where id in (select max(id) from devices); 报错:ERROR 1093 (HY000): You can't ...
- php安裝7.3版本
CentOS 安装 EPEL 源: yum install epel-release 安装 REMI 源: CentOS 7: yum install http://rpms.remirepo.net ...
- PHP常见的设计模式
设计模式六大原则 开放封闭原则:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 里氏替换原则:所有引用基类的地方必须能透明地使用其子类的对象. 依赖倒置原则:高层模块不应该依赖低层模块,二者 ...
- 【保姆级】Python项目(Flask网页)部署到Docker的完整过程
大家好,我是辰哥~ 前提:相信看到这篇文章的读者应该已经学会了Docker的安装以及Docker的基本使用,如果还不会的可以参考我之前的文章进行详细学习! 1.安装版:2300+字!在不同系统上安装D ...