Java8 Time API与老Date之间的转换

    前面我已经总结了Java8 Time API常用的一些方法、封装的工具类,可是最近需要对一个比较老的项目进行重构,大致看了一下使用的Jdk还是7而且里面的时间工具类还是使用的Date和Calendar。既然是项目重构,我的第一想法是Jdk版本必须得升一升,和同事商量后还是决定使用Java8(本人比较看好Java 9中的HTTP/2,奈何9版本广受诟病,而10中局部变量类型推断对于习惯于强类型定义的Javaer还是一时半会难以接收,最终还是选择了Java8),另外Spring项目也该换成Spring cloud微服务项目了吧(听说最近Spring cloud alibaba大火,有空去研究研究.)。呃,有点跑远了,还是回到我们主题,来介绍一下Date如何转换成Java8 Time API吧。

  在Java官方社区里面了解到,Time API提供了方法将Date转换为LocalDate,不过并非直接转换,而是通过ZonedDateTime。

  下面我先来详细的介绍Date转换成LocalDate的方法

11)将java.util.Date转换为ZonedDateTime。 22)使用它的toLocalDate()方法从ZonedDateTime获取LocalDate。

  代码示例

1public static void main(String[] args) { 2 Date date = new Date(); 3 Instant instant = date.toInstant(); 4 ZoneId zoneId = ZoneId.systemDefault(); 5 6 // atZone()方法返回在指定时区从此Instant生成的ZonedDateTime。 7 LocalDate localDate = instant.atZone(zoneId).toLocalDate(); 8 System.out.println("Date = " + date); 9 System.out.println("LocalDate = " + localDate); 10}----------------------Date = Fri Jun 16 15:29:05 CST 2017 LocalDate = 2017-06-16

  LocalDate转换为Date的方法

11)使用ZonedDateTime将LocalDate转换为Instant。 22)使用from()方法从Instant对象获取Date的实例

  代码示例

1public static void main(String[] args) { 2 ZoneId zoneId = ZoneId.systemDefault(); 3 LocalDate localDate = LocalDate.now(); 4 ZonedDateTime zdt = localDate.atStartOfDay(zoneId); 5 6 Date date = Date.from(zdt.toInstant()); 7 8 System.out.println("LocalDate = " + localDate); 9 System.out.println("Date = " + date); 10 11 } 12---------------------- 13LocalDate = 2017-06-16 14Date = Fri Jun 16 00:00:00 CST 2017

ps:最后补充一个能很好展示新旧API转换的工具类

1/** 2 * 获取本周开始日期 3 * time Date格式 4 * 5 * @return LocalDate格式 6 */ 7 public static LocalDate getFirstDayOfWeek(Date time) { 8 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //设置时间格式 9 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");//设置时间格式 10 Calendar cal = Calendar.getInstance(); 11 cal.setTime(time); 12 int dayWeek = cal.get(Calendar.DAY_OF_WEEK);//获得当前日期是一个星期的第几天 13 if (1 == dayWeek) { 14 cal.add(Calendar.DAY_OF_MONTH, -1); 15 } 16 cal.setFirstDayOfWeek(Calendar.MONDAY); 17 int day = cal.get(Calendar.DAY_OF_WEEK);//获得当前日期是一个星期的第几天 18 cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);//根据日历的规则,给当前日期减去星期几与一个星期第一天的差值 19 LocalDate date = LocalDate.parse(sdf.format(cal.getTime()),dtf); 20 return date; 21 }
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Java日期时间API系列31

  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前

java常用类(2)

三、时间处理相关类Date类:计算机世界把1970年1月1号定为基准时间,每个度量单位是毫秒(1秒的千分之一),用long类型的变量表示时间。Date分配Date对象并初始化对象,以表示自从标准基准时间(称为“历元”(epoch),即1970年1月1日08:00:00GMT)以来的指定毫秒数。示例:packagecn.tanjian

java8 时间类与Date类的相互转化

java8时间类与Date类的相互转化在转换中,我们需要注意,因为java8之前Date是包含日期和时间的,而LocalDate只包含日期,LocalTime只包含时间,所以与Date在互转中,势必会丢失日期或者时间,或者会使用起始时间。如果转LocalDateTime,那么就不存在信息误差。//Date与Instant的相互转化