Java Date类十分钟理清时间的设置与操作
Date
顾名思义,Date就是关于时间的一个类,这个类主要就是一些对时间的设置以及操作,查阅官方文档可知,Date类继承自java.lang.Object 类,相关的构造方法如下:
构造方法:
Date():无参构造,分配一个 Date对象并将它初始化,它代表的时间分配给它,测量精确到毫秒:
import java.util.Date; //因为这个类属于util包内,所以需要事先导入 Date d = new Date(); //无参构造,创建对象 System.out.println(d);
//输出: Fri Jan 14 10:22:58 CST 2022 CST为中国标准时间
//若直接使用无参构造,其实就是输出当前的系统时间
Date(long date) :有参构造
首先一秒等于1000毫秒,这个有参构造就是分配一个 Date对象并将它初始化为代表指定的毫秒数自基准时间被称为格林威治时间,即1970年1月1日,00:00:00 GMT。 也就是传入一个毫秒数,然后从1970年1月1日,00:00:00 开始增加输入的时间:
//有参构造 Date d = new Date(5000); //5000毫秒等于5秒 System.out.println(d);
//输出:Thu Jan 01 08:00:05 CST 1970
//为什么我这里数输出08:00:05呢? 注意看,我的是CST中国标准时间,中国属于东八区,所以需要+8
//其实换算到GMT(格林威治时间)就是-8,也就是00:00:05,没有问题的
Date类的方法:
getTime(): 来获取毫秒数,其返回值类型是long,其可以把日期对象转成毫秒值
System.out.println(d.getTime());
//输出:1642127814408
//这个数值就是从1970-1-1 00:00:00开始计算的毫秒值
hashCode():返回此对象的哈希代码值,其实这个用处不大,了解即可
System.out.println(d.hashCode());
//输出:1450437638 哈希吗值
equals(Object obj) :比较两个相等的日期
Date d = new Date(); Date c = new Date(); System.out.println(d.equals(c));
//输出:true,因为同时创建了两个对象,都是当前时间,因为计算机运行速度很快,甚至没有一毫秒
//所以两个时间是相同的
after(Date when):测试如果这个日期是在指定日期之后返回true,否则false
before(Date when) :测试如果这个日期是在指定日期之前返回true,否则false
这两个方法大家可以自行去试试~~~
但是我们会发现,Date类不能输出类似于普遍的时间格式:比如2021年01=年01日 13时00分 所以我们需要Calenda类。
Calenda:
calendar类位于java.util包中,它提供多个方法获取,设置,增加日历字段值,比Date类更强大,
calendar是抽象类,所以不能直接使用new去新建对象。
所以我们需要使用到GregorianCalendar类,这个类也是Calenda的子类,提供了世界上大多数使用标准的日历系统。
使用该类获得当前年份、月份和当前是周几的代码:
GregorianCalendar g = new GregorianCalendar(); //新建一个GregorianCalendar 对象 int year = g.get(Calendar.YEAR); int month = g.get(Calendar.MONTH); //使用GregorianCalendar 的get方法,获取当前月份 int day = g.get(Calendar.DAY_OF_MONTH); //使用GregorianCalendar 的get方法,获取当前日期 System.out.println(year+"年"+month+"月"+day+"日");
//输出:2022年0月14日
//解释:月份是从0开始计算的,所以0代表一月,11代表12月。月份返回为0-11
//解决方法:
System.out.println(year+"年"+(month+1)+"月"+day+"日"); //在月份后面+1即可
//输出:2022年1月14日
get方法:
也可以使用GregorianCalendar 输出更具体的时间格式:
比如输出年月日时分秒,这也是一般网页和系统都会显示的时间:(完整代码)
package DateTest; import java.util.Date; import java.util.Calendar; import java.util.GregorianCalendar; public class test01 { public static void main(String[] args) { Date a = new Date(); GregorianCalendar g = new GregorianCalendar(); int year = g.get(Calendar.YEAR); int month = g.get(Calendar.MONTH); int day = g.get(Calendar.DAY_OF_MONTH); int hour = g.get(Calendar.HOUR_OF_DAY); int min = g.get(Calendar.MINUTE); int second = g.get(Calendar.SECOND); System.out.println(year+"年"+(month+1)+"月"+day+"日"+hour+"时"+min+"分"+second+"秒"); } }
//输出:2022年1月14日11时14分36秒 这样是不是就是时间输出的理想格式呢
//这也是我在写这个博客的时间~~~
set方法:
上面我们用到的是get方法,那当然也有对应的set方法,来设置一下自定义的时间:
以设置为2020年1月1日为例:
//这部分代码还是以上面get方法的代码为基础 g.set(Calendar.YEAR,2020); g.set(Calendar.MONTH,0); //千万不要忘了月份的起始值为 0,0代表一月 g.set(Calendar.DAY_OF_MONTH,1); //当set完后,再去使用get方法去获取,那么获取到的就是修改后的时间了
//输出:2020年1月1日
但是在设置时间中若把月份输入大于11或者天数设置大于30天或31天(2月大于28天),那么将会自动往前进一:
g.set(Calendar.YEAR,2020); g.set(Calendar.MONTH,0); g.set(Calendar.DAY_OF_MONTH,35); //日期输入35天
//输出:2020年2月4日
//输入是1月份,但是天数大于真实一个月的天数,所以会增加一个月
SimpleDateFormat:
但是在实际应用过程中,可能对时间的格式要求不一样,比如有:
- 2020/01/01 12:00:00
- 2020-01-01 星期* 上/下午
- 2020年01月01日 12时00分00秒 ----------等等
所以我们不可能在每一次需要不一样的格的时候再去重新写代码,所以Java提供了这个SimpleDateFormat类:
这个类属于text包下,所以使用前需要导入,分别继承自Object、Format、DateFormat类,这个类的一些格式符号如下图:
回到前面,我们如果需要打印不同的格式时间,该怎么做呢? 我们先来看看SimpleDateFormat的构造方法:
先看第二个:SimpleDateFormat(String pattern) :使用给定的模式和默认的日期格式符号默认 FORMAT现场构建了一个 SimpleDateFormat,意思是根据你给定的格式符号来创建这个时间的对象。
public static String dateToString(Date d,String pattern){ //新建一个静态方法 SimpleDateFormat s = new SimpleDateFormat(pattern); //有参构造 String time = s.format(d); //SimpleDateFormat的format方法:给定的 Date进入日期/时间线和附加的结果给出的 StringBuffer格式。 return time; //返回时间 }
代码解释:其实这个方法就是传入一个Date类的时间,和SimpleDateFormat有参构造方法需要的一个参数pattern,也就是格式符,根据上那张表格查看需要什么格式即可,然后使用format方法即可。
完整代码:
import java.text.SimpleDateFormat; //记得要导入哦 import java.util.Date; public class test03 { public static void main(String[] args) { Date d = new Date(); //创建方法需要的对象Date d String t = dateToString(d,"yyyy-MM-dd HH:mm:ss: E a"); //E代表周几,a代表上/下午 System.out.println(t); //使用方法 } //方法区 public static String dateToString(Date d,String pattern){ SimpleDateFormat s = new SimpleDateFormat(pattern); String time = s.format(d); return time; } }
如果我们需要输出别的格式:
"yyy年MM月dd日 HH时mm分ss秒 E a"
//输出:2022年01月14日 15时45分06秒 星期五 下午"yyyy/MM/dd HH:mm:ss E a"
//输出:2022/01/14 15:45:36 星期五 下午"MM/dd/yyyy HH:mm:ss" //甚至把年份方后面
//输出:01/14/2022 15:46:24
//可以根据需要,结合上面的符号表,去自定义想要的时间格式啦~~~~
关于Date类,就介绍到这啦,大家看完了快去试试吧~~
到此这篇关于Java Date类十分钟理清时间的设置与操作的文章就介绍到这了,更多相关Java Date类内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!