最近在代码的开发过程中发现,小组内对于实体类中的时间字段。有的用Date,有的用Timestamp,有的又用LocalDateTime,于是我就想整理一下这些时间类型有什么区别,是否可以统一?
1、Date(不推荐)
Date类型是Java8之前的时间处理类,存在一些问题比如说非线程安全问题。时区的处理比较麻烦等。
Date类型的基本使用:
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String format = sdf.format(date);//当前时间 2023-10-12
Date类型目前许多方法已经弃用了。
2、Calendar类(不推荐)
Calendar(日历)类,主要的功能是用来日期字段间的操作,更像是对Date类的增强。里面有许多的方法,可以获取当前年份、月份、日期等等的
Calendar calendar = Calendar.getInstance();
System.out.println("年:" + calendar.get(Calendar.YEAR));//年:2023
// 初始月份是从0开始
System.out.println("月:" + (calendar.get(Calendar.MONTH)+1));//月:10
System.out.println("日:" + calendar.get(Calendar.DATE));//日:12
System.out.println("小时:" + calendar.get(Calendar.HOUR_OF_DAY));//小时:23
System.out.println("分钟:" + calendar.get(Calendar.MINUTE));//分钟:0
System.out.println("秒:" + calendar.get(Calendar.SECOND));//秒:36
System.out.println("毫秒:" + calendar.get(Calendar.MILLISECOND));//毫秒:534
System.out.println("今年的第几个星期:" + calendar.get(Calendar.WEEK_OF_YEAR));//今年的第几个星期:41
System.out.println("这个月的第几个星期:" + calendar.get(Calendar.WEEK_OF_MONTH));//这个月的第几个星期:2
System.out.println("今年的第几天:" + calendar.get(Calendar.DAY_OF_YEAR));//今年的第几天:285
System.out.println("这个月的第几天:" + calendar.get(Calendar.DAY_OF_MONTH));//这个月的第几天:12
System.out.println("这个星期的第几天:" + calendar.get(Calendar.DAY_OF_WEEK));//这个星期的第几天:5
如果有需要用到一些方法可以使用使用
3、LocalDateTime类(推荐)
LocalDate、LocalTime、LocalDateTime类是Java1.8开始对时间类进行的一次大更新,它是在java.time包中,功能十分强大。
LocalDate:用来获取日期格式(年月日)
LocalTime:用来获取时间格式(时分秒)
LocalDateTime:用来获取日期+时间的格式
LocalDate localDate = LocalDate.now();
LocalTime localTime = LocalTime.now();
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDate);//2023-10-12
System.out.println(localTime);//23:13:59.259
System.out.println(localDateTime);//2023-10-12T23:13:59.259
System.out.println(localDateTime.getDayOfMonth());//12
System.out.println(localDateTime.getDayOfWeek());//THURSDAY
System.out.println(localDateTime.getMonth());//OCTOBER
System.out.println(localDateTime.getMonthValue());//10
System.out.println(localDateTime.getMinute());//13
LocalDateTime还提供了很多其他时间操作方法,比如说时间相加相减等等。设置时间格式也可以使用DateTimeFormatter,相比于SimpleDateFormat最大的好处就是在于DateTimeFormatter 是线程安全的。
总结
我个人是推荐使用LocalDateTime(jdk1.8),很多时候我们不知道数据与Java类型如何去对应。我推荐的方式是
date类型(日期时间格式)使用LocalDate去对应
time类型(时分秒时间格式)使用LocalTime去对应
datetime类型(完整的日期时分秒时间格式)使用LocalDateTime去对应
timestamp类型(完整的日期时分秒时间格式)使用LocalDateTime去对应
- LocalDateTime LocalDate Timestamp 类型 时间localdatetime localdate timestamp类型 localdatetime localdate localtime时间 timestamp datetime类型 时间 localdatetime chronounit localdate localtime localdatetime zonedatetime localdate localtime timestamp类型 时间 数据 timestamp类型 时间 小数 localdatetime localdate localtime jdk1 localdatetime construct localdate instance localdatetime localdate calendar日期