有了它,谁还在用Date?Calendar?

其实也不能这么绝对,毕竟还没到那个程度上。Java8 新增了处理时间的一组类(LocalDate、LocalDateTime、LocalTime),刚开始使用时觉得非常费劲,没有Calendar好用,但是真的使用之后觉得还是比较好用的啊。建议大家以后多多使用。废话少说,看代码~

1、Date与LocalDate的互转

Date转LocalDate:

Date date = new Date();
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();

LocalDate 转 Date:

LocalDateTime localDateTime = LocalDateTime.now();
Date date = Date.from(localDateTime.toInstant(ZoneOffset.UTC))

显然,LocalDate和Date之间使用了Instant来转换类型,也可以使用其他的方式来转换。LocalDate.of()等等,稍微复杂的狠呢!

2、LocalDate的一些时间操作

 DateTimeFormatter ymd = DateTimeFormatter.ofPattern("yyyy-MM-dd");
//字符串转换成LocalDate类型
LocalDate ld = LocalDate.parse("2015-11-23", ymd);
System.out.println("年月日:"+ld.getYear()+"-"+ld.getMonthValue()+"-"+ld.getDayOfMonth());
System.ouot.println("从1970年1月1日开始的总天数:"+ld.toEpochDay());
ld = LocalDate.of(2015,11,25);
System.out.println("新年月日:"+ld.getYear()+"-"+ld.getMonthValue()+"-"+ld.getDayOfMonth()); ld = ld.plusDays(1);
System.out.println("加一天年月日:"+ld.getYear()+"-"+ld.getMonthValue()+"-"+ld.getDayOfMonth()); ld = ld.minusDays(2);
System.out.println("减两天年月日:"+ld.getYear()+"-"+ld.getMonthValue()+"-"+ld.getDayOfMonth()); ld = ld.plusMonths(1);
System.out.println("加一个月年月日:"+ld.getYear()+"-"+ld.getMonthValue()+"-"+ld.getDayOfMonth()); ld = ld.minusMonths(1);
System.out.println("减一个月年月日:"+ld.getYear()+"-"+ld.getMonthValue()+"-"+ld.getDayOfMonth()); ld.plusWeeks(1);//加一星期
ld.plusYears(1);//加一年
ld.minusWeeks(1);//减一星期
ld.minusYears(1);//减一年

强大到我们不用去手工的计算这些东西,省事,省力,灵活性很强。

3、部分框架的支持

因为项目是Spring4+MyBatis3的,所以我只测试了这两个框架对它的支持性。

(1)Spring4 是支持LocalDate的。在spring mvc接收参数时做下格式转换:

 @RequestMapping("/test")
public void method(HttpServletRequest request,HttpServletResponse response,
@DateTimeFormat(pattern="yyyy-MM-dd") LocalDate localDate){
//接收处理逻辑
}

对于Spring MVC的接收参数还需要说明:如果是传入的Date类型,也需要使用注解@DateTimeFormat进行格式化,不然会报400参数错误。如果是bean对象,而且含有Date或者LocalDate类型字段,也需要添加注解@DateTimeFormat。

(2)MyBatis3 对LocalDate的支持。现阶段还是不支持的,需要我们做些处理。

方案一、修改MyBatis包源码。不到迫不得已的情况下,是不会尝试的。

方案二、增加一个Handler处理类型转换。网上找到的处理方案,亲试,完全可以。

此处只介绍方案二,大牛可以去尝试下方案一。

第一步:创建转换器

 package com.hfms.mybatis.type;

 import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.time.LocalDateTime; import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedTypes;
/**
*类型转换器,以LocalDateTime为例,使用LocalDate需做相应修改
*
**/
@MappedTypes(LocalDateTime.class)
public class LocalDateTimeTypeHandler extends BaseTypeHandler<LocalDateTime> { @Override
public void setNonNullParameter(PreparedStatement ps, int i, LocalDateTime parameter, JdbcType jdbcType) throws SQLException {
ps.setTimestamp(i, Timestamp.valueOf(parameter));
} @Override
public LocalDateTime getNullableResult(ResultSet rs, String columnName) throws SQLException {
Timestamp date = rs.getTimestamp(columnName);
if (date == null) {
return null;
} else {
return date.toLocalDateTime();
}
} @Override
public LocalDateTime getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
Timestamp date = rs.getTimestamp(columnIndex);
if (date == null) {
return null;
} else {
return date.toLocalDateTime();
}
} @Override
public LocalDateTime getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
Timestamp date = cs.getTimestamp(columnIndex);
if (date == null) {
return null;
} else {
return date.toLocalDateTime();
}
}
}

第二步:在mybatis-config.xml中配置

 <typeHandlers>
<package name="com.hfms.mybatis.type"/>
</typeHandlers>

第三步:创建对象的时候使用:

 public class Test{
LocalDateTime localDateTime;
}

这样在TestHandler.xml中就可以直接使用了。

未完待续~~

Java8 时间处理类的使用实践(LocalDate...)的更多相关文章

  1. Java8 时间日期类操作

    Java8 时间日期类操作 Java8的时间类有两个重要的特性 线程安全 不可变类,返回的都是新的对象 显然,该特性解决了原来java.util.Date类与SimpleDateFormat线程不安全 ...

  2. java8时间工具类Localdate、LocaldateTime

    优点: 1.方便. Date 只能是日期加时间的格式,而 LocalDate .LocalTime.LocalDateTime 分别代表日期,时间,日期+时间,非常灵活.再就是后者在日期计算及格式化方 ...

  3. java8时间类API安全问题(赠送新的时间工具类哟)

    LocalDateTime等新出的日期类全是final修饰的类,不能被继承,且对应的日期变量都是final修饰的,也就是不可变类.赋值一次后就不可变,不存在多线程数据问题. simpleDateFor ...

  4. Java8获取当前时间、新的时间日期类如Java8的LocalDate与Date相互转换、ZonedDateTime等常用操作包含多个使用示例、Java8时区ZoneId的使用方法、Java8时间字符串解析成类

     下面将依次介绍 Date转Java8时间类操作 ,Java8时间类LocalDate常用操作(如获得当前日期,两个日期相差多少天,下个星期的日期,下个月第一天等) 解析不同时间字符串成对应的Java ...

  5. Java8 ,LocalDate,LocalDateTime处理日期和时间工具类,

    Java8 ,LocalDate,LocalDateTime处理日期和时间工具类 1.获取今天的日期 2.在Java 8 中获取年.月.日信息 3.在Java 8 中处理特定日期 4.在Java 8 ...

  6. 基于Java8的日期时间工具类DateTimeFormatter

    原文:https://blog.csdn.net/qq_36596145/article/details/85331002 import java.time.Instant; import java. ...

  7. Java日期时间API系列8-----Jdk8中java.time包中的新的日期时间API类的LocalDate源码分析

    目录 0.前言 1.TemporalAccessor源码 2.Temporal源码 3.TemporalAdjuster源码 4.ChronoLocalDate源码 5.LocalDate源码 6.总 ...

  8. Java日期时间API系列11-----Jdk8中java.time包中的新的日期时间API类,使用java8日期时间API重写农历LunarDate

    通过Java日期时间API系列7-----Jdk8中java.time包中的新的日期时间API类的优点,java8具有很多优点,现在网上查到的农历转换工具类都是基于jdk7及以前的类写的,下面使用ja ...

  9. 时间工具类之“ JDK1.8中 LocalDate、LocalTime、LocalDateTime、LocalDateTimeUtil四个时间工具类”

    一.使用的原因 在JDK8发布的时候,推出了LocalDate.LocalTime.LocalDateTime这个三个时间处理类,以此来弥补之前的日期时间类的不足,简化日期时间的操作. 在Java8之 ...

随机推荐

  1. Presenter 层

    后是 Presenter 层,它是处理业务逻辑和业务数据的,所以必须持有 Model 的引用,同时要将处理完的数据交给 View 层用于显示,也必须持有 View 的引用,那么,一开始我们就要把这两层 ...

  2. C++ STL 二分查找

    转载自 https://www.cnblogs.com/Tang-tangt/p/9291018.html 二分查找的函数有 3 个: 参考:C++ lower_bound 和upper_bound ...

  3. ubuntu 安装java1.8

    1.进入官网下载页面http://www.oracle.com/technetwork/java/javase/downloads/index.html 2.选择需要的版本,进入下载页面 下载 jdk ...

  4. sudo无需输入密码设置

    注意这个是无需输入密码的设置,不是无需输入sudo 1 在终端输入: sudo gedit /etc/sudoers 2 在打开文件中的root   ALL=(ALL:ALL) ALL下一行添加&qu ...

  5. python 递归,深度优先搜索与广度优先搜索算法模拟实现

    一.递归原理小案例分析 (1)# 概述 递归:即一个函数调用了自身,即实现了递归 凡是循环能做到的事,递归一般都能做到! (2)# 写递归的过程 1.写出临界条件 2.找出这一次和上一次关系 3.假设 ...

  6. UIAutomation元素识别软件

    通过Python调用UIAutomation库来开发代码时,都会遇到需要识别元素的问题.笔者在这里推荐两款好用的软件:UISpy和Inspect. UISpy识别元素后,我们需要的属性有:ClassN ...

  7. 【MM系列】SAP MM中物料帐下修改物料的价格

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP 物料帐下修改物料的价格   ...

  8. 红黑树插入操作---以JDK 源码为例

    红黑树遵循的条件: 1.根节点为黑色. 2.外部节点(叶子节点)为黑色. 3.红色节点的孩子节点为黑色.(由此,红色节点的父节点也必为黑色) 4.从根节点到任一外部节点的路径上,黑节点的数量相同. 节 ...

  9. C++学习笔记(七)--共用体、枚举、typedef

    1.共用体 union其定义与结构体类似:union 类型名{ 成员表列;};声明变量的方法也类似: a. union 类型名{            b. union { c.类型名 变量名; 成员 ...

  10. css的继承之width属性(容易忽略)

    众所周知,css的三大特性分别是 继承性,层叠性,和优先级. 那么这里就详细说一下css中width的继承性及其特殊情况. 继承性概念详解:css的继承性指的被包在内部的标签拥有外部标签的样式性,子元 ...