java date time 转换_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的方法

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

代码示例

public static voidmain(String[] args) {

Date date= newDate();

Instant instant=date.toInstant();

ZoneId zoneId=ZoneId.systemDefault();//atZone()方法返回在指定时区从此Instant生成的ZonedDateTime。

LocalDate localDate =instant.atZone(zoneId).toLocalDate();

System.out.println("Date = " +date);

System.out.println("LocalDate = " +localDate);

}

----------------------

Date = Fri Jun 16 15:29:05 CST 2017

LocalDate = 2017-06-16

LocalDate转换为Date的方法

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

代码示例

public static voidmain(String[] args) {

ZoneId zoneId=ZoneId.systemDefault();

LocalDate localDate=LocalDate.now();

ZonedDateTime zdt=localDate.atStartOfDay(zoneId);

Date date=Date.from(zdt.toInstant());

System.out.println("LocalDate = " +localDate);

System.out.println("Date = " +date);

}----------------------LocalDate= 2017-06-16Date= Fri Jun 16 00:00:00 CST 2017

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

/*** 获取本周开始日期

* time Date格式

*

*@returnLocalDate格式*/

public staticLocalDate getFirstDayOfWeek(Date time) {

SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd"); //设置时间格式

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");//设置时间格式

Calendar cal =Calendar.getInstance();

cal.setTime(time);int dayWeek = cal.get(Calendar.DAY_OF_WEEK);//获得当前日期是一个星期的第几天

if (1 ==dayWeek) {

cal.add(Calendar.DAY_OF_MONTH,-1);

}

cal.setFirstDayOfWeek(Calendar.MONDAY);int day = cal.get(Calendar.DAY_OF_WEEK);//获得当前日期是一个星期的第几天

cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);//根据日历的规则,给当前日期减去星期几与一个星期第一天的差值

LocalDate date =LocalDate.parse(sdf.format(cal.getTime()),dtf);returndate;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值