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 条评论
登录 后参与评论

相关文章

来自专栏腾讯NEXT学位

Mobx 核心概念简单入门:以股票为例

3465
来自专栏一个会写诗的程序员的博客

Kotlin + Spring Boot (Gradle) + React.js (Nowa) 集成 Web 开发

Kotlin + Spring Boot (Gradle) + React.js (Nowa) 集成 Web 开发

842
来自专栏AlgorithmDog的专栏

Akka 使用系列之三: 层次结构和容错机制

这篇文章介绍 Akka 层次结构,以及基于层次结构的容错机制。 ? 1. Akka 的层次结构 我们需要实现一个翻译模块,其功能是输入中...

2045
来自专栏程序员的SOD蜜

不使用DalFactory和IDAL,支持多种数据库应用

MS的PetShop示例应用程序的“多层架构”被很多.NET开发人员奉为经典的架构,我以前做的项目团队的Leader也是照搬它的,甚至来到现在这个公司后,好几个...

1868
来自专栏GopherCoder

『No19: Gorm 上手指南』

如果你是做后端开发的,日常工作中,除了熟悉编程语言之外,数据库怕是最常用的技术了吧。

1701
来自专栏黄Java的地盘

基于React与Redux的留言墙的实现

由于某事业群需要留言墙用于年会,同时需要调用大象公众号服务器接口,所以在今年年初开发了留言墙用于活动现场交流。

811
来自专栏NetCore

一个让人遗忘的角落—Exception(二)

在上一篇中"一个被人遗忘的角落--Exception(一)"中,跟大家简单介绍了一下Exception,也使大家充分的了解了Exception管理在一个项目中的...

1769
来自专栏应用案例

Web前端面试题小集

来自:前端打小怪升级笔记,作者:spademan segmentfault.com/a/1190000008322096 一、一个页面上两个div左右铺满整个浏...

2769
来自专栏谈补锅

<转>iOS性能优化:Instruments使用实战

最近采用Instruments 来分析整个应用程序的性能.发现很多有意思的点,以及性能优化和一些分析性能消耗的技巧,小结如下。

862
来自专栏恰同学骚年

ASP.Net WebForm温故知新学习笔记:二、ViewState与UpdatePanel探秘

开篇:经历了上一篇《aspx与服务器控件探秘》后,我们了解了aspx和服务器控件背后的故事。这篇我们开始走进WebForm状态保持的一大法宝—ViewState...

913

扫码关注云+社区