zoukankan      html  css  js  c++  java
  • jdk1.8时间API

     一、说明
        Java 8 在java.time包下推出了一组全新的时间日期API,涵盖了日期、时间、日期时间、时区、时刻、间隔、时钟等
         新的java.time包下的所有类都是不可变类型而且线程安全的,解决了在此之前日期时间中存在的线程安全、横跨多包、使用复杂等诸多问题
    二、示例
        1、时间和日期

     // 本地时间
     LocalTime lt = LocalTime.now();
     
     // 本地日期
     LocalDate ld = LocalDate.now();
     
     // 本地日期时间
     LocalDateTime ldt = LocalDateTime.now();
     
     // 创建一个指定的时间
     LocalDateTime ldt = LocalDateTime.of(2012, 2, 12, 12, 12, 12);
     
     // 日期时间转日期或时间
     LocalDate ld = ldt.toLocalDate();
     LocalTime lt = ldt.toLocalTime();
     
      2、字符串互转

     // 格式化模版
     DateTimeFormatter DATETIME19 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
     
     // 时间转字符串
     String dtStr = DATETIME19.format(LocalDateTime.now());
     
     // 字符串转时间
     LocalDateTime ldt = LocalDateTime.parse(dtStr, DATETIME19);
     
    3.时间运算

     //获取指定单位的值
     int year = ldt.getYear();
     int day = ldt.getDayOfMonth();
     int week = ldt.getDayOfWeek().getValue();
     int hour = ldt.getHour();
     
     // 指定时间单位的值
     LocalDateTime ldt2 = ldt1.withDayOfMonth(10).withYear(2020);  // 返回的是一个新的对象,需要接收
     
     // 在现有时间上做加法
     LocalDateTime ldt2 = ldt1.plusYears(2).plusMonths(-2);
     
     // 在现有时间上做减法
     LocalDateTime ldt2 = LocalDateTime.now().minus(-2, ChronoUnit.MONTHS).minusDays(3)
     
     // 获取一天的开始或结束
     LocalDateTime ldtStart = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
     LocalDateTime ldtEnd = LocalDateTime.of(LocalDate.now(), LocalTime.MAX);
     
     // 时间是否在指定时间之前
     boolean isBefore = ldt1.isBefore(ldt2);
     
     // 时间是否在指定时间之后
     boolean isAfter = ldt1.isAfter(ldt2);
     
     // 比较两个日期是否相等 重写的equals可以直接比较
     boolean equality = ld1.equals(ld2);
     
     // 比较是否是周期性日期,比如 生日 节假日 账单日 等
     MonthDay holiday = MonthDay.of(5, 1); // 五一
     boolean equality = holiday.equals(MonthDay.from(LocalDateTime.now())); // 今天是否是五一
     
    4、间隔计算

     LocalDateTime ldt1 = LocalDateTime.of(2012, 2, 12, 12, 12, 12);
     LocalDateTime ldt2 = LocalDateTime.of(2015, 5, 15, 15, 15, 15);
     
     // 时间的间隔    Duration 表示时分秒的时间量(累计向上单位的差,即计算实际的总共的差)
     Duration duration = Duration.between(ldt1, ldt2);
     long durnMill = duration.toMillis();   // 计算毫秒差
     long durnMin = duration.toMinutes();   // 计算分钟差
     long durnHour = duration.toHours();    // 计算小时差
     long durnDay = duration.toDays();      // 计算天数差
     
     // 日期的间隔    Period 表示年月日的时间量(只计算当前单位的差,不累计向上单位的差距)
     Period period = Period.between(ldt1.toLocalDate(), ldt2.toLocalDate());
     long perdDay = period.getDays();        // 只计算当前差,不累计年月差带来的天数差
     long perdMonth = period.getMonths();    // 只计算当前差,不累计年数差带来的月数差
     long perdYear = period.getYears();
     
     // 计算实际总间隔天数的第二种方法
     long diffEehDay =ldt1.toLocalDate().toEpochDay() - ldt2.toLocalDate().toEpochDay();
     
     // 计算指定时间单位之差
     long diffChrDay =ChronoUnit.DAYS.between(ldt1, ldt2);    // 日期单位之差
     long diffChrMin =ChronoUnit.MINUTES.between(ldt1, ldt2); // 分钟单位之差
     
    5、时间戳、瞬时点、Date、本地时间、转换

     // 时间戳
     long timestamp = System.currentTimeMillis();
     
     // 瞬时点
     Instant instant = Instant.now();
     
     // Date
     Date  date =  new Date();
     
     // 时间戳 转 瞬时点
     Instant instant = Instant.ofEpochMilli(timestamp);
     
     // 瞬时点 转 时间戳
     long timestamp = instant.toEpochMilli();
     
     // Date 转 瞬时点
     Instant instant = date.toInstant();
     
     // 瞬时点 转 Date
     Date date = Date.from(instant);
     
     // 瞬时点 转 本地时间
     LocalDateTime ldt = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
     
     // 本地时间 转 时间戳
     long timestamp = ldt.toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
     long timestamp = ldt.toInstant(ZoneOffset.of("+08:00")).toEpochMilli();
     long timestamp = ldt.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
     
    6、时区时间

        // 时区ID的集合
        Set<String> zoneSet = ZoneId.getAvailableZoneIds();
     
        // 默认时区
        ZoneId zoneId = ZoneId.systemDefault();
     
        // 时区时间
        LocalDateTime cur = LocalDateTime.now();                                    // 本地默认时间 2019-04-29T14:45:07.156
        LocalDateTime ldt = LocalDateTime.now(ZoneId.of("America/Los_Angeles"));    // 时区当前时间 2019-04-28T23:45:07.156
        OffsetDateTime odt = OffsetDateTime.now(ZoneId.of("America/Los_Angeles"));  // 带偏移量时间 2019-04-28T23:45:07.156-07:00
        ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("America/Los_Angeles"));    // 带时区的时间 2019-04-28T23:45:07.156-07:00[America/Los_Angeles]
        LocalDateTime ldto = odt.toLocalDateTime();                                 // 转本地类时间 2019-04-28T23:45:07.156
        LocalDateTime ldtz = zdt.toLocalDateTime();                                 // 转本地类时间 2019-04-28T23:45:07.156
       
        // 时钟 类似时间戳
        Clock clockDefault = Clock.systemDefaultZone();               //系统默认
        Clock clockUtc = Clock.systemUTC();                           // UTC
        Clock c1ockZone = Clock.system(ZoneId.of("+08:00"));          //指定时区
        Clock clockRegion = Clock.system(ZoneId.of("Asia/Shanghai")); //指定区域
        long timestamp = clockDefault.millis();                       //获取时间戳,等于System.currentTimeMillis()
     
     
    原文链接:https://blog.csdn.net/guoxilen/article/details/89671698
  • 相关阅读:
    BZOJ 1391: [Ceoi2008]order
    BZOJ 4504: K个串
    2019 年百度之星·程序设计大赛
    POJ 2398 Toy Storage (二分 叉积)
    POJ 2318 TOYS (二分 叉积)
    HDU 6697 Closest Pair of Segments (计算几何 暴力)
    HDU 6695 Welcome Party (贪心)
    HDU 6693 Valentine's Day (概率)
    HDU 6590 Code (判断凸包相交)
    POJ 3805 Separate Points (判断凸包相交)
  • 原文地址:https://www.cnblogs.com/superming/p/12693697.html
Copyright © 2011-2022 走看看