Java日期相关API的基本操作总结
馆主阿牛 人气:3前言
想大概总结一下日期相关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日历类的使用,感兴趣的可以去看看!
加载全部内容