Web项目中愉快的使用Java8日期API

在Java8发布之前繁琐的日期API使我们不得不借助第三方的Jar包Joda来对日期进行操作,而Java8的日期java.time包则是由Joda的作者来进行操刀,我相信不管是因为Java8性能的提升、函数式编程、流、新的日期API的引入、还是开发者对新兴技术的热情拥抱,我们的新项目基本都是基于Java8开发了,而且因为Java良好的向后兼容性,我们老的项目升级为Java8也并非难事。

为了兼容历史版本,新的日期API没有选择直接在旧的Date上直接动刀,而是选择增加了LocalDate、LocalTime、LocalDateTime等新的类,并且提供了Date和LocalDateTime的互转

LocalDateTime转为Date

  //获取当前时间
  LocalDateTime now = LocalDateTime.now();  
  //获取当前系统所在的时区
  ZoneId zoneId = ZoneId.systemDefault();  
  //获取该时间点在该时区上的时间日期信息
  ZonedDateTime zonedDateTime = now.atZone(zoneId);  
  Date nowDate = Date.from(zonedDateTime.toInstant());

Date转为LocalDateTime

 Date date = new Date();

 Instant instant = date.toInstant();

 ZoneId zoneId = ZoneId.systemDefault();

关于时间加减LocalDateTime提供了plus和minus的各种方法,需要的时候根据提示找对应的API即可。

时间格式化

LocalDateTime now = LocalDateTime.now();

DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:ss:mm");
String format = df.format(now);

字符串解析

 DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:ss:mm");

 LocalDateTime date = LocalDateTime.from(df.parse("2017-10-11 22:22:22"));

SpringMVC

Spring4版本之后默认对JSR310提供支持,只需要在日期字段上加注解

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")

Mybatis

mybatis中数据库字段对应的实体类时间也是默认使用Date类型不做改变,而是提供了针对jsr310的一个插件

<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-typehandlers-jsr310</artifactId>
<version>xxx</version>
</dependency>

引入包之后不需要做任何改变,实体类为LocalDateTime等的字段就可以识别

SpringDataJPA

Spring的做法跟Mybatis的类似,使用一个Jsr310JpaConverters类来做转换,SpringBoot中只要在启动类上加注解即可:

@EntityScan(basePackageClasses = {Application.class,Jsr310JpaConverters.class})

作者:神奇一只猫 链接:https://www.jianshu.com/p/56a119395fcd

原文发布于微信公众号 - java工会(javagonghui)

原文发表时间:2018-05-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Jerry的SAP技术分享

CRM WebUI and Hybris的Product页面标题实现

Controller只需实现IF_BSP_WD_HISTORY_STATE_DESCR~GET_STATE_DESCRIPTION方法:

3844
来自专栏IT进修之路

原 荐 SpringBoot整合mybati

1784
来自专栏JadePeng的技术博客

jenkins X实践系列(2) —— 基于jx的DevOps实践

jx是云原生CICD,devops的一个最佳实践之一,目前在快速的发展成熟中。最近调研了JX,这里为第2篇,使用已经安装好的jx来实践CICD,旨在让大家了解基...

4382
来自专栏xingoo, 一个梦想做发明家的程序员

Oozie分布式任务的工作流——邮件篇

在大数据的当下,各种spark和hadoop的框架层出不穷。各种高端的计算框架,分布式任务如乱花般迷眼。你是否有这种困惑!——有了许多的分布式任务,但是每天需...

3437
来自专栏北京马哥教育

Python大法之告别脚本小子---信息资产收集类脚本编写

在采集到URL之后,要做的就是对目标进行信息资产收集了,收集的越好,你挖到洞也就越多了............当然这一切的前提,就是要有耐心了!!!由于要写工具...

1330
来自专栏安富莱嵌入式技术分享

【RL-TCPnet网络教程】第9章 RL-TCPnet网络协议栈移植(uCOS-III)

本章教程为大家讲解RL-TCPnet网络协议栈的uCOS-III操作系统移植方式,学习了第6章讲解的底层驱动接口函数之后,移植就比较容易了,主要是添加库文件、配...

923
来自专栏cloudskyme

虚拟化平台cloudstack(8)——从UI开始

UI ucloudstack采用的是前后端分离的架构,就是说前端可以选择使用web、swing甚至其它的界面,都可以。 我们来看cloudstack的UI信息吧...

3726
来自专栏bboysoul

初识ansible

但是这个都不管,我们主要是用来做ansible的实验,还有如果文章中没有说明,那么一切操作都是在k8s-master节点上操作

1154
来自专栏Ryan Miao

gradle中使用嵌入式(embedded) tomcat, debug 启动

在gradle项目中使用embedded tomcat。 最开始部署项目需要手动将web项目打成war包,然后手动上传到tomcat的webapp下,然后启动t...

4459
来自专栏pangguoming

简单的Hibernate入门简介

其实Hibernate本身是个独立的框架,它不需要任何web server或application server的支持。然而,大多数的Hibernate入门介绍...

3559

扫码关注云+社区