前面我已经总结了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 void main(String[] args) {
Date date = new Date();
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 void main(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-16
Date = Fri Jun 16 00:00:00 CST 2017

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

 /**
* 获取本周开始日期
* time Date格式
*
* @return LocalDate格式
*/
public static LocalDate 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);
return date;
}

  

最新文章

  1. log4j:ERROR Failed to rename [/log/xxx.log] to [/log/xxx.log.2016-11-23.log]
  2. java-JDBC登录注册代码
  3. 报错: Unable to start activity ComponentInfo:You need to use a Theme.AppCompat theme
  4. Linux:基础配置--备忘
  5. sp_executesql介绍和使用
  6. Linux提示no crontab for root的解决办法
  7. CSS设置图片垂直居中的方法
  8. mongodb 安装为windows服务
  9. JavaScript动画附源码(一)
  10. 几个外国Delphi Blog网站
  11. Linux 文件操作——系统调用和标准I/O库
  12. linux使用FIO测试磁盘的iops
  13. ubuntu系统安装FTP
  14. 关于FTP操作的功能类
  15. 开源:ASP.NET Aries 开发框架(已支持.NET Core)
  16. 从Jensen不等式到Minkowski不等式
  17. eclipse创建的maven项目,pom.xml文件报错解决方法
  18. Eciplce ALT+/失效的解决方法
  19. MySQL数据库之存储过程与存储函数
  20. ListBox使用

热门文章

  1. Selenium3+python自动化016-Selenium Grid
  2. Burp Suite Professional 针对APP抓包篡改数据提交【安全】
  3. 深入浅出Mybatis系列八-mapper映射文件配置之select、resultMap
  4. unity中ContentSizeFitter刷新不及时的问题
  5. Flask知识总结
  6. BK: Data mining: concepts and techniques (1)
  7. Sulley安装手记
  8. 浅谈radis
  9. cookie和会话
  10. 马走日的解法(dfs)