date time 分开存储如何合并_都9102年了,你还没使用java8的Date-Time API?

095bc1464b381acd02985dfedcef7c4f.png

Java 8通过发布新的Date-Time API (JSR 310)来进一步加强对日期与时间的处理。那么,之前已经有了标准的 java.util.Date以及后来的java.util.Calendar,为什么还要搞一个Date-Time的API呢?我们先看看原先的Date是如何获取以及格式化的

原始Date

Date date = new Date();System.out.println(date);

这样输出的结果:

54e9598ed253da0a92dd3943612f0ed6.png

我们来解析:

Wed Oct 23 18:31:33 CST 2019

星期三 十月 23日 当前时间 (标准时间) 年份

可读性太差了,反正很让我反感。那么有人就说了,不是有个SimpleDateFormat可以进行格式化吗?好,我们再按照SimpleDateFormat进行格式化

 Date date = new Date(); System.out.println(date); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS"); System.out.println(sdf.format(date));

输出结果

3023df65dddc6f630266264dbb117cdd.png

这样的结果确实是很人性化,一看就明白~但是,在alibaba开发规范手册中却不建议我们直接使用SimpleDateFormat呢?

我们可以从它的源码看问题,

private StringBuffer format(Date date, StringBuffer toAppendTo, FieldDelegate delegate) { // Convert input date to time field list calendar.setTime(date); boolean useDateFormatSymbols = useDateFormatSymbols(); for (int i = 0; i < compiledPattern.length; ) { int tag = compiledPattern[i] >>> 8; int count = compiledPattern[i++] & 0xff; if (count == 255) { count = compiledPattern[i++] << 16; count |= compiledPattern[i++]; } switch (tag) { case TAG_QUOTE_ASCII_CHAR: toAppendTo.append((char)count); break; case TAG_QUOTE_CHARS: toAppendTo.append(compiledPattern, i, count); i += count; break; default: subFormat(tag, count, delegate, toAppendTo, useDateFormatSymbols); break; } } return toAppendTo;}

其中calendar这个是共享变量,多线程场景下时使用相同的SimpleDateFormat对象造成冲突,所以线程不安全。所以建议我们使用Java8的Date-Time的API。

java8的Date-Time API

java8新的Date-Time 的API的对日期时间的创建、格式化、解析、计算、修改使用方式很方便。

LocalDate对日期的api

d620933f65609a0c18ad407733b5c5a3.png

以上输出结果:

01bd168a3096d92eb28387e8e1f3cda1.png

LocalTime对时间的api

06b6e212706ec75f964dba5d65ede100.png

以上输出结果:

56af4a0bc07b2bc8b60d236ca70ca02d.png

LocalDateTime对日期时间的api以及格式化

LocalDateTime就是LocalDate与LocalTime的结合,LocalDate与LocalTime拥有的功能,LocalDateTime也同样拥有。因此我们重点来看看它的格式化

 LocalDateTime localDateTime = LocalDateTime.now(); System.out.println("当前日期时间:"+localDateTime); System.out.println("当前日期时间格式话之后:" + localDateTime.format( DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss SSS") ));

以上输出结果:

fe2cd4e5f4d80c4d9d013d26e101b0e2.png

总结

  • LocalDate、LocalTime、LocalDateTim不可变对象(源码中都类的定义使用了final修饰,成员变量也是),修改这些对象对象会返回一个副本。
  • Java8对日期时间的操作明显优于标准的 java.util.Date以及后来的java.util.Calendar。

本人水平有限,难免有错误或遗漏之处,望大家指正和谅解,提出宝贵意见,愿与之交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值