Java时间获取详情
- java.util.Date
- java.util.Calendar
- Java8推荐的时间获取方法
- LocalDate获取日期
- LocalTime获取时间
- LocalDateTime 获取时间和日期
这里先附上后面会用到的进行时间格式化的代码:
SimpleDateFormat timeSimpleDateFormatter = new SimpleDateFormat("hh:mm:ss");
SimpleDateFormat daySimpleDateFormatter = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat dateSimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("hh:mm:ss");
DateTimeFormatter dayFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
插一嘴,SimpleDateFormat是非线程安全的,其基于Calendar。而DateTimeFormatter则是线程安全的。
java.util.Date
最常用的时间类,也支持格式化
Date date = new Date();
System.out.println("date : " + date);
System.out.println("time : " + timeSimpleDateFormatter.format(date));
System.out.println("day : " + daySimpleDateFormatter.format(date));
System.out.println("dateTime : " + dateSimpleDateFormat.format(date));
运行结果如下:
总结:Date原始数据可读性差,需要用到SimpleDateformat进行格式化。能获取年、月、日但是都被弃用了。
java.util.Calendar
由于Date设计的不妥,后面由Calnedar逐步替代。
Calendar instance = Calendar.getInstance();
/**
* 常见用法,获取年月日
*/
int year = instance.get(Calendar.YEAR);
int month = instance.get(Calendar.MONTH);
int day = instance.get(Calendar.DAY_OF_MONTH);
Date date = instance.getTime();
System.out.println(instance.toInstant());
System.out.println("time : " + timeSimpleDateFormatter.format(date));
System.out.println("day : " + daySimpleDateFormatter.format(date));
System.out.println("dateTime : " + dateSimpleDateFormat.format(date));
运行结果如下:
总结:虽然较Date设计更合理,功能更完善,但是性能差,代码冗余,仍旧不推荐使用。
Java8推荐的时间获取方法
LocalDate获取日期
LocalDate date = LocalDate.now();
System.out.println("date " + date);
System.out.println("format " + dayFormatter.format(date));
运行结果如下:
同时已经提供了很多易读易用的方法:
LocalTime获取时间
LocalTime time = LocalTime.now();
System.out.println("time " + time);
System.out.println("format " + timeFormatter.format(time));
运行结果如下:
相对于格式化,多了一个毫秒的数值。
同样提供了很多对时间易读易用的函数:
LocalDateTime 获取时间和日期
LocalDateTime datetime = LocalDateTime.now();
System.out.println(datetime);
datetime = LocalDateTime.of(date,time);
System.out.println(datetime);
System.out.println("format " + dateTimeFormatter.format(datetime));
运行结果如下:
同样提供了易读易用的方法:
总结:Java8中的时间函数更完善、性能更好、同时在格式化的时候使用的DateTimeFormatter不会出现线程安全问题,而SimpleDateFormatter会出现安全问题;
后面在补上Java8时间函数怎么对接Mybatis