• 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 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;
        }

      

  • 相关阅读:
    VS2010、SQL Server 2008和SQL Server 2012安装详解
    IIS服务寄宿
    C#中错误:不包含适合于入 口点的静态“Main”方法 的解决方法
    硬件的一些性能指标
    SATA SAS SSD 硬盘介绍和评测
    mysql数据库锁定机制
    mysql日志设置优化
    MySQL硬件瓶颈分析
    可扩展性设计之数据切分
    硬件环境对系统性能的影响
  • 原文地址:https://www.cnblogs.com/JackpotHan/p/11289485.html
Copyright © 2020-2023  润新知