1. 简介

如果我们想在Java中获取当前的时间,可以使用 java.util.Date类 和 java.util.Calendar类来实现。其中,Date类封装了系统的日期和时间信息,Calendar类则会根据系统的日历来填充Date对象。

java.util.Date是一个表示日期和时间的类,代表了系统特定的时间戳。它是按照UTC时间显示的,可以精确到毫秒,源码内部使用long类型进行时间的存储。我们要注意与java.sql.Date区分,后者是用在数据库中的类,且是按照本地时区显示的。Date对象表示的时间,其默认顺序是星期、月、日、小时、分、秒、年。

2. 构造方法

java.util.Date类给我们提供了多个构造方法,如下图所示:

但是一般在开发时,我们常用的也没有这么多,一般使用时如下形式:

● Date():创建Date对象并初始化,该对象可以获取本地的当前时间,该时间会精确到毫秒。

● Date(long date):构造一个Date对象,并接受一个从1970年1月1日起的毫秒数作为参数。

3. 常用API方法

当我们构造出来一个Date对象之后,就可以使用它的一些API方法进行时间的操作了,这些常用的API方法如下:

序号方法和描述boolean after(Date date)若调用该方法的Date对象,在指定的日期之后,则返回true,否则返回false。boolean before(Date date)若调用此方法的Date对象,在指定的日期之前,则返回true,否则返回false。int compareTo(Date date)比较调用此方法的Date对象和指定的日期。若两者相等则返回0,若该对象在指定日期之前则返回负数,若该对象在指定日期之后则返回正数。boolean equals(Object date)若调用该方法的Date对象,和指定日期相等时则返回true,否则返回false。long getTime( )返回自1970年1月1日 00:00:00 GMT以来的毫秒数。void setTime(long time)用从1970年1月1日00:00:00 以后的time毫秒数,设置时间和日期。String toString( )把该Date对象转换成dow mon dd hh:mm:ss zzz yyyy格式的字符串,其中dow是指一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat)。

4. 使用方法

4.1 基本使用

接下来我们先通过一个简单的案例,来演示一下Date的基本用法。

import java.util.Date;public class Demo01 {public static void main(String[] args) {//获取当前时间的时间戳long currentTimeMillis = System.currentTimeMillis();System.out.println("时间戳="+currentTimeMillis);//获取当前时间对象Date date=new Date();//Sat Feb 11 12:04:03 IRKT 2023System.out.println("当前时间="+date);//转为字符串:Sat Feb 11 12:04:03 IRKT 2023System.out.println("当前时间="+date.toString());//转换为本地时区:2023年2月11日 下午12:04:03System.out.println("当前时间,Locale="+date.toLocaleString());//转换为GMT时区:11 Feb 2023 04:04:03 GMTSystem.out.println("当前时间,GMT="+date.toGMTString());}}

如果我们想获取当前时间的时间戳,可以使用System.currentTimeMillis()方法。构造出Date对象之后,我们可以直接打印该对象,就能展示出当前时间,但是这个格式并不一定符合我们中国人的阅读习惯,后面我们可以对日期进行格式化操作。

4.2 其他用法

除了上面这些基本用法之外,Date还有其他的一些用法。

import java.util.Date;public class Demo01 {public static void main(String[] args) {//获取当前时间对象Date date=new Date();//获取年月日System.out.println("年="+(date.getYear() + 1900)); // 必须加上1900System.out.println("月="+(date.getMonth() + 1)); // 0~11,必须加上1System.out.println("日="+date.getDate()); // 1~31,不能加1System.out.println("时="+date.getHours()); // 0~23System.out.println("分="+date.getMinutes()); // 0~59,不能加1System.out.println("秒="+date.getSeconds()); // 0~59,不能加1System.out.println("时间戳="+date.getTime()); // 时间戳,毫秒值//计算自己已经活了多少天,1990年01月31日//构造对象的另一个方法,已过时。year:要减去1900,月份从0开始,0-11;日期是1-31Date d1 = new Date(1990-1900, 2-1, 31);Date d2 = new Date();long time = d2.getTime() - d1.getTime();System.out.println("已活天数="+time/1000/60/60/24);}}

另外我们还要注意,getYear()方法返回的年份必须加上1900;getMonth()方法返回的月份是0~11,分别表示1~12月,所以要加1;而getDate()方法返回的日期范围是1~31,就不能加1。

在打印本地时区表示的日期和时间时,不同的计算机可能会有不同的展示结果,后面我们可以使用SimpleDateFormat设置出我们想要的日期时间格式。

4.3 统计时间差

有时候我们要统计某个功能的执行时间,此时就可以用该功能结束时的时间,减去开始时的时间,得到一个时间差,这就是该功能的执行时间。

import java.util.Date;public class Demo03 {public static void main(String[] args) {//获取当前时间对象//开始时间Date startDate=new Date();for(int i=0;i<100000;i++) {System.out.println("循环次数"+i);}//结束时间Date endDate=new Date();//计算时间差long time = endDate.getTime() - startDate.getTime();System.out.println("10w次循环的执行时间是 "+time+" 毫秒");}}

至此,就把Java语言如何获取日期和时间给大家介绍完毕了,希望对大家有所帮助,大家也快动手练习起来吧!

分类: 源码分享 标签: 暂无标签

评论

暂无评论数据

暂无评论数据

目录