zoukankan      html  css  js  c++  java
  • JDK8 之时间日期组件优化:【LocalDateTime,LocalDate,LocalTime,Peroid,Duration,DateTimeFormatter】

    /**
     * java8之前:
     * Date:表示时间和日期,不支持时间日期运算,不支持国际化
     * Calendar:表示时间和日期,支持时间和日期操作,但是不支持格式化
     * SimpleDateFormatte:仅能格式化Date
     *
     * java8:兼容旧版Date
     * LocalDateTime:日期和时间
     * LocalDate:仅表示日期
     * LocalTime:仅表示时间
     * Peroid:仅表示日期间隔
     * Duration:时间间隔,以秒和纳秒为单位
     * DateTimeFormatter:可以格式化LocalDate,LocalTime以及LocalDateTime
     */

    使用实例

    // 获取当前时间
     System.out.println(LocalDateTime.now()); 
     // 结果:2019-12-19T20:28:50.358
     
     System.out.println(LocalDate.now()); 
     // 结果:2019-12-19
     
     System.out.println(LocalTime.now());
     // 结果:20:28:50.358
     
     System.out.println(LocalTime.now().toString());
     // 结果:20:28:50.358
     
     // 获取指定时间
     System.out.println(LocalDateTime.of(2019,12,18,10,2,1));
     // 结果:2019-12-18T10:02:01
     
     // 获取1天1小时之后的时间
     System.out.println(LocalDateTime.now().plusDays(1).plusHours(1));
     // 结果:2019-12-20T21:28:50.358
     
     // 获取1天1小时之之前的时间
     System.out.println(LocalDateTime.now().plusDays(-1).plusHours(-1));
     // 2019-12-18T19:28:50.358
     
     // 获取指定的年月日
     System.out.println(LocalDateTime.now().getYear());
     System.out.println(LocalDateTime.now().getMonthValue());
     System.out.println(LocalDateTime.now().getDayOfMonth());
     
     // 计算时间距离
     LocalDate localDate1 = LocalDate.of(2018,10,2);
     LocalDate localDate2 = LocalDate.of(2019,11,3);
     long num = localDate1.until(localDate2, ChronoUnit.DAYS);
     System.out.println("until:days:"+num);
     num = localDate1.until(localDate2, ChronoUnit.WEEKS);
     System.out.println("until:days:"+num);
     // TemporalAdjusters 实现:上一个,下一个时间点
     System.out.println(LocalDate.now().with(TemporalAdjusters.previous(DayOfWeek.MONDAY)));
     System.out.println(LocalDate.now().with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)));
     System.out.println(LocalDate.now().with(TemporalAdjusters.next(DayOfWeek.MONDAY)));
     // 月最后一天
     System.out.println(LocalDate.now().with(TemporalAdjusters.lastDayOfMonth()));
     // 月最后一个周一
     System.out.println(LocalDate.now().with(TemporalAdjusters.lastInMonth(DayOfWeek.MONDAY)));
     // 月第一天
     System.out.println(LocalDate.now().with(TemporalAdjusters.firstDayOfNextMonth()));
     System.out.println(LocalDate.now().with(TemporalAdjusters.dayOfWeekInMonth(2,DayOfWeek.MONDAY)));
    
     // 时间格式化 DateTimeFormatter
     DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
     // date -> string
     System.out.println(dateTimeFormatter.format(LocalDateTime.now()));
     // string -> date
     System.out.println(dateTimeFormatter.parse("20190212111111"));
     System.out.println(LocalDateTime.parse("20190212111111", dateTimeFormatter));
    
     // 时区 Instant
     // UTC时区(格林尼治时间)
     // 获取UTC时间   比北京时间晚8小时
     Instant instant = Instant.now();
     System.out.println(instant);
     // 获取北京时间(东8区)
     OffsetDateTime offsetDateTime = Instant.now().atOffset(ZoneOffset.ofHours(8));
     System.out.println("offsetDateTime:"+offsetDateTime);
     // 获取时间戳
     System.out.println("时间戳:"+Instant.now().toEpochMilli());
     // 时间戳操作
     System.out.println("时间戳:"+Instant.ofEpochSecond(18).plusMillis(1).toEpochMilli());
    
     // LocalDateTime 与时间戳转换
     // 时间戳 -》 LocalDateTime (默认改时间戳为格林尼治时间)
     long timestamp_1 = System.currentTimeMillis();
     LocalDateTime localDateTime = Instant.ofEpochMilli(timestamp_1).atOffset(ZoneOffset.ofHours(0)).toLocalDateTime();
     long timestamp = LocalDateTime.now().toInstant(ZoneOffset.ofHours(0)).toEpochMilli();
     System.out.println("时间戳:timestamp_1="+timestamp_1);
     System.out.println("时间戳:localDateTime="+localDateTime);
     System.out.println("时间戳:timestamp="+timestamp);
    
     // 兼容旧版本Date
     LocalDateTime ldt = LocalDateTime.of(2019,12,18,10,2,1);
     Date date = Date.from(ldt.atZone(ZoneId.systemDefault()).toInstant());
     // date -> LocalDateTime
     LocalDateTime dt = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();


  • 相关阅读:
    FineUI开源版(ASP.Net)初学手册-部分JS整理
    ASP.NET-FineUI开发实践-15
    ASP.NET-FineUI开发实践-14
    FineUI开源版(ASP.Net)开发实践-目录
    ASP.NET-FineUI开发实践-13(二)
    ASP.NET-FineUI开发实践-13(一)
    在VS.NET中根据条件设置不同的MainForm
    VB.NET在基类中定义共享事件(类似于C#中的静态事件)
    也谈解决Combobox绑定数据后取值出现System.Data.DataRowView的问题
    在SQL Server 2014下面使用的SQL2000的Northwind和Pubs示例数据库
  • 原文地址:https://www.cnblogs.com/outpointexception/p/12071380.html
Copyright © 2011-2022 走看看