Java日期相关API的基本操作总结
目录
- 前言
- JDK8之前
- Date对象的使用
- 格式化日期SimpleDateFormat类的使用
- JDK8之后
- LocalDate 、LocalTime 、LocalDateTime的使用
- 格式化日期 DateTimeFormatter 类的使用
- 结语
前言
想大概总结一下日期相关API操作原因是对于日期的操作我们开发中还是很常见的,包括在数据库中保存日期,包括之前String类中对字符串的一些处理开发中都很常见,但大多和javascript以及python中的相关API一致我就没总结,对于日期这块今天还是大概总结一下吧!
JDK8之前
Date对象的使用
对于这个对象,现在他的许多方法已经过时了,我们只需要记住他的两个构造器以及两个方法的使用就行!
那么接下来在案例中看看这两个构造器的使用以及两个方法的使用:
public class Demo { public static void main(String[] args) { Date date1 = new Date();//构造器一 :创建一个对应当前日期的对象 System.out.println(date1.toString()); //方法一:输出当前日期 System.out.println(date1.getTime()); //方法二:输出当前日期对应的时间戳 Date date2 = new Date(1668749175853L); //构造器二:创建指定毫秒数的Date对象 System.out.println(date2); } }
但其实这里的Date有两个,这个需要我们注意:
一个是java.util.Date,另一个是他的子类java.sql.Date。第二个很明显是和我们的数据库有关的,数据库中保存日期则需要转换为java.sql.Date类型!
因此,java.util.Date和子类java.sql.Date之间的转换我们也要了解一下!
java.sql.Date 转换为 java.util.Date
这个很简单,由于 java.sql.Date是java.util.Date的子类,因此java.sql.Date转换为java.util.Date只需要进行对象的上转型操作:
java.util.Date date3 = new java.sql.Date(1668749175853L); System.out.println(date3);
当然也是可以像下面的用getTime()方法转换成时间戳,然后用构造器最后完成转换!
java.util.Date 转换为 java.sql.Date
方式一:和多态有关,还是有局限性!
java.util.Date date3 = new java.sql.Date(1668749175853L); //上转型 java.sql.Date data4 = (java.sql.Date)date3; //下转型
方式二:我们常用的
Date date5 = new Date(); java.sql.Date date6 = new java.sql.Date(date5.getTime()); System.out.println(date6);//只会输出年月日
需要注意的是java.sql.Date只会输出年月日
格式化日期SimpleDateFormat类的使用
上面Date类的输出格式不够国际化看,对于我们来说看着不顺,因此,还需要格式化成我们需要的格式。
package 日期; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Test { public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat(); //使用默认的构造器 //格式化:日期 -》字符串 Date date = new Date(); String str = sdf.format(date); System.out.println(str); //解析:字符串 —》日期 String str2 = "2022/11/18 下午2:30"; Date date2 = null; try { date2 = sdf.parse(str2); } catch (ParseException e) { e.printStackTrace(); } System.out.println(date2); } }
这个是默认的格式化!
下面写我们常用的格式化:
package 日期; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Test { public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); //格式化:日期 -》字符串 Date date = new Date(); String str = sdf.format(date); System.out.println(str); //解析:字符串 —》日期 String str2 = "2022-11-18 02:37:06"; Date date2 = null; try { date2 = sdf.parse(str2); } catch (ParseException e) { e.printStackTrace(); } System.out.println(date2); } }
JDK8之后
之前说过,jdk8之前的Date大多说构造器已经过时了,因为哪些构造器使用时有偏移量,需要注意。
JDK 1.0中包含了一个 java.util.Date 类,但是它的大多数方法已经在 JDK 1.1引入 Calendar 类之后被弃用了。而 Calendar 并不比 Date 好多少。它们面临的问题是:
- 可变性:像日期和时间这样的类应该是不可变的。
- 偏移性:Date 中的年份是从1900开始的,而月份都从0开始。
- 格式化只对 Date 有用, Calendar 则不行。
- 此外,它们也不是线程安全的;不能处理闰秒等。
LocalDate 、LocalTime 、LocalDateTime的使用
LocalDate 、LocalTime 、LocalDateTime类是其中较重要的几个类,它们的实例是不可变的对象,分别表示使用 ISO -8601日历系统的日期、时间、日期和时间。它们提供了简单的本地日期或时间,并不包含当前的时间信息,也不包含与时区相关的信息。下面通过小案例大概看看:
package 日期; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; public class Demo2 { public static void main(String[] args) { //now() 获取当前的日期,时间,时间+日期 LocalDate localDate = LocalDate.now(); LocalTime localTime = LocalTime.now(); LocalDateTime localDateTime = LocalDateTime.now(); System.out.println(localDate); System.out.println(localTime); System.out.println(localDateTime); System.out.println("---------------------"); //of() 设置指定的年月日时分秒,没有偏移量 LocalDateTime localDateTime1 = LocalDateTime.of(2022,10,1,12,12,43); System.out.println(localDateTime1); System.out.println("---------------------"); //getXxx() 获取指定的年 月 周等等 LocalDateTime localDateTime2 = LocalDateTime.now(); System.out.println(localDateTime2.getMonth()); System.out.println(localDateTime2.getHour()); System.out.println("---------------------"); //withXxx() 设置改变一些时间的值,能体现不可变性,方法返回值是改变后的 LocalDateTime localDateTime3 = LocalDateTime.now(); LocalDateTime localDateTime4 = localDateTime3.withHour(5); System.out.println(localDateTime3); System.out.println(localDateTime4); } }
格式化日期 DateTimeFormatter 类的使用
关于这个类,我只写一下自定义格式化日期,这一点和SimpleDateFormat类的使用没啥区别:
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss"); //格式化: String str = dateTimeFormatter.format(LocalDateTime.now()); System.out.println(str); //解析 TemporalAccessor parse = dateTimeFormatter.parse("2022-10-01 12:12:43"); System.out.println(parse);
结语
当然,jdk8之前还有一个Calendar日历类的使用,感兴趣的可以去看看!
到此这篇关于Java日期相关API的基本操作总结的文章就介绍到这了,更多相关Java日期API内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!