玩转Java8日期工具类-基础

内容基于的是 Java8官方文档,以及Java时间类总结 的总结。BTW:其实具体方法的使用直接在IDEA中看源码更方便直接。

1.老一辈:Java.util.Date Java.sql.Date Java.util.Calendar 1.1 Java.util.Date

最经典的表示时间的类,包含年月日时分秒,精确到毫秒级别,保留两个没被废弃的构造方法

Date nowDate = new Date(); System.out.println("现在时间: " + nowDate); //结果打印当前时间 “现在时间: Sat Aug 14 17:38:49 CST 2021” //上面其实是返回了此时毫秒时间最接近的秒时间 long nowDateMS = nowDate.getTime(); //填入long类型的 January 1, 1970, 00:00:00 GMT到某个时间的毫秒数 Date nowDatePlus1000s = new Date(nowDateMS + 1000*1000); System.out.println(nowDatePlus1000s); //结果是: "Sat Aug 14 17:55:29 CST 2021"

常用方法:

//返回该时间点到January 1, 1970, 00:00:00 GMT的毫秒数 date.getTime() //判断两个时间的前后,返回值为int类,前者早于后者返回-1;等则为0,晚则为1 date.compareTo(Date anotherDate) //判断两个时间的前后,返回值为boolean,通过比较距离1970那个时间的毫秒数的大小判断 date.before(Date anotherDate) date.after(Date anotherDate)

Date类型借助 java.text.SimpleDateFormat 实现格式化,返回值是 String。同时也逆向解析字符串对应的字符串,返回Date类,但是要保持格式一致,否则返回null

////格式化 SimpleDateFormat sdf12 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); // hh表示12小时制 SimpleDateFormat sdf24 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // HH表示24小时制 String date1 = sdf12.format(nowDate); System.out.println(date1); //结果: 2021-08-14 06:41:54 String date2 = sdf24.format(nowDate); System.out.println(date2) //结果: 2021-08-14 18:41:54 ////解析 字符串格式必须是 "yyyy-MM-dd HH:mm:ss" 类型才可成功,也就是你是怎么转过去的,就怎么转回来,确保一一对应,否则返回null Date date3 = sdf24.parse(date2, new ParsePosition(0)); // ParsePosition(0) 表示解析全部的字符串。 1.2 Java.sql.Date

java.sql.Date extends java.util.Date,二者区别不大,值得注意只有毫秒的构造函数。它主要对应于SQL中的DATE类型,因此将时分秒,毫秒设置为0。不过它可以转换成 java8 中的 LocalDate类。

java.sql.Date now = new java.sql.Date(100000000); System.out.println(now); //结果:1970-01-02 LocalDate date4 = now.toLocalDate(); System.out.println(date4);

java.sql.Time 对应SQL中的 TIME类型

java.sql.Time nowTime = new java.sql.Time(1000000000); System.out.println(nowTime); //结果:21:46:40

java.sql.Timestamp sql时间戳,对应于SQL中的TIMESTAMP类,精确到纳秒级

java.sql.Timestamp nowTimestamp = new java.sql.Timestamp(1000000000); System.out.println(nowTimestamp); //结果:1970-01-12 21:46:40.0 1.3 java.util.Calendar

java.util.Calendar是一个抽象类,能够存储 年月日时分秒,同时实现加减乘除。但是其主要作用于包含丰富灵活的方法实现对日期,包括年、月、日和星期的互相转换,比如想知道某年某月最后一天的日期是多少,以及今年有多少周。

BTW:在Calendar中,一周从 SUNDAY 开始到 SATURDAY 结束是1~7,一年月份是从Jan 到 Dec 对应 0~11。

具体可以参考 申城异乡人-Java Calendar类使用总结

Calendar calendar = Calendar.getInstance(); Date nowDate = calendar.getTime(); //// or int year = calendar.get(Calendar.YEAR); int month = calendar.get(Calendar.MONTH)+1; int day = calendar.get(Calendar.DAY_OF_MONTH); // 24小时制 int hour = calendar.get(Calendar.HOUR_OF_DAY); int minute = calendar.get(Calendar.MINUTE); int second = calendar.get(Calendar.SECOND);

​ 在Java 1.8之后提供了三个新的时间类,localDate localTime localDateTime 分别对应日期,时间,日期+时间,三者都是final修饰,不可变类,因此线程安全。

2.1 java.time.LocalDate

localDate 保存日期,可以获取日期对应的星期,因此可以用于打印日历,参考SleeypbearZz-Java通过LocalDate类打印当前月日历。它提供了比上面更多的方法,以下列举了一些,完整参考api文档。

// 构造 LocalDate nowLocalDate = LocalDate.now(); LocalDate toDay = LocalDate.of(2021,8,15); System.out.println("LocalDate默认时间格式是: " + nowLD); System.out.println(nowLD.getDayOfWeek() + " + " + nowLD.getMonthValue() + " + " + + nowLD.getDayOfYear()); //设置,其他不变,只改变对应的月,年。 System.out.println(nowLD.withMonth(2) + " + " + nowLD.withYear(2019)); // 增加 System.out.println(nowLD.plusDays(1) + " + " + nowLD.plusWeeks(1) + " + " + nowLD.plusMonths(1) + " + " + nowLD.plusYears(1)); //减少 System.out.println(nowLD.minusDays(1) + " + " + nowLD.minusWeeks(1) + " + " + nowLD.minusMonths(1) + " + " + nowLD.minusYears(1)); //还提供了计算两个时间点的时间差 until相关方法,复杂了一些,以后有时间再研究 2.2 java.time.localTime

localTime 参考文章 ZetCode-Java LocalTime。总结有一下的内容:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwzgjs.html