zoukankan      html  css  js  c++  java
  • LocalDate、LocalDateTime、LocalTime开发小结

      在我之前的文章《【整理】Java 8新特性总结 》中有提到Date/Time API (JSR 310)对日期与时间的处理。它将服务端对时间的处理进行了统一,使得对时间的处理更加规范和统一。

      本文主要是对Date/Time API开发过程中的小结。

    Date 和LocalDate、LocalDateTime、LocalTime之间的转换

      Date转LocalDate、LocalDateTime、LocalTime

    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();
        LocalDateTime localDateTime = instant.atZone(zoneId).toLocalDateTime();
        LocalTime localTime = instant.atZone(zoneId).toLocalTime();
        System.out.println("Date = " + date);//Wed Apr 24 14:43:25 CST 2019
        System.out.println("LocalDate = " + localDate);//2019-04-24
        System.out.println("LocalDateTime = " + localDateTime);//2019-04-24T14:43:25.030
        System.out.println("LocalTime = " + localTime);//14:43:25.030
    }

      LocalDateTime转Date

    public static void main(String[] args) {
    
        LocalTime localTime = LocalTime.now();
        LocalDate localDate = LocalDate.now();
        LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);
        ZoneId zone = ZoneId.systemDefault();
        Instant instant = localDateTime.atZone(zone).toInstant();
        java.util.Date date = Date.from(instant);
        System.out.println("LocalDate = "+localDate);//2019-04-24
        System.out.println("LocalTime = "+localTime);//14:43:25.030
        System.out.println("LocalDateTime = "+localDateTime);//2019-04-24T14:43:25.030
        System.out.println("Date = "+date);//Wed Apr 24 14:43:25 CST 2019
    }

    LocalDateTime与LocalTime、LocalDate之间的转换

      LocalDateTime转LocalTime、LocalDate

    public static void main(String[] args) {
    
        LocalDateTime localDateTime = LocalDateTime.now();
        LocalDate localDate = localDateTime.toLocalDate();
        LocalTime localTime = localDateTime.toLocalTime();
        System.out.println("LocalDateTime = "+localDateTime);//2019-04-24T14:43:25.030
        System.out.println("LocalDate = "+localDate);//2019-04-24
        System.out.println("LocalTime = "+localTime);//14:43:25.030      
    }

      LocalDate转LocalDateTime

    public static void main(String[] args) {
        
      LocalDate localDate =LocalDate.now();
      LocalDateTime localDateTime = localDate.atStartOfDay();
      LocalDateTime localDateTime2 = localDate.atTime(LocalTime.now());
      LocalDateTime localDateTime1 = LocalDateTime.of(localDate,LocalTime.MAX);
      System.out.println(localDate);//2019-04-24
      System.out.println(localDateTime);//2019-04-24T00:00
      System.out.println(localDateTime1);//2019-04-24T23:59:59.999999999
      System.out.println(localDateTime2);//2019-04-24T15:18:41.823
    }

    String和LocalDateTime之间的转换

      LocalDateTime转String

    public static void main(String[] args) {
       //定义时间格式化      
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm");
        LocalDateTime ldt = LocalDateTime.now();
        String time = dtf.format(ldt);
        String time1 = dtf1.format(ldt);
        System.out.println(time);//2019-04-24 15:58:04
        System.out.println(time1);//2019.04.24 15:58
     }

     String转LocalDateTime

    public static void main(String[] args) {
         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
              
         LocalDateTime localDateTime = LocalDateTime.parse("2019-04-24 15:33:23",dtf);
         System.out.println(localDateTime);//2019-04-24T15:33:23      
    }

    时间戳和LocalDateTime之间的转换

      localDateTime转时间戳

    public static void main(String[] args) {
           
      System.out.println(LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli());//1556095208585  毫秒
      System.out.println(LocalDateTime.now().toInstant(ZoneOffset.of("+8")).getEpochSecond());//1556095208585 秒
    }

      时间戳转localDateTime

    public static void main(String[] args) {
        Long timestamp = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).getEpochSecond();
        LocalDateTime time2 =LocalDateTime.ofEpochSecond(timestamp,0,ZoneOffset.ofHours(8));
       System.out.println(time2);
    }

    其他

    LocalDateTime.now().plus(100000, ChronoUnit.DAYS)
    同 LocalDateTime.now().plusDays(100000)
    LocalDateTime.now().get(ChronoField.DAY_OF_MONTH)
    同 LocalDateTime.now().getDayOfMonth()
    ChronoUnit枚举
    public enum ChronoUnit implements TemporalUnit {
    
        NANOS("Nanos", Duration.ofNanos(1)),
       
        MICROS("Micros", Duration.ofNanos(1000)),
        
        MILLIS("Millis", Duration.ofNanos(1000_000)),
       
        SECONDS("Seconds", Duration.ofSeconds(1)),
        
        MINUTES("Minutes", Duration.ofSeconds(60)),
        
        HOURS("Hours", Duration.ofSeconds(3600)),
       
        HALF_DAYS("HalfDays", Duration.ofSeconds(43200)),
       
        DAYS("Days", Duration.ofSeconds(86400)),
       
        WEEKS("Weeks", Duration.ofSeconds(7 * 86400L)),
        
        MONTHS("Months", Duration.ofSeconds(31556952L / 12)),
       
        YEARS("Years", Duration.ofSeconds(31556952L)),
       
        DECADES("Decades", Duration.ofSeconds(31556952L * 10L)),
        
        CENTURIES("Centuries", Duration.ofSeconds(31556952L * 100L)),
         
        MILLENNIA("Millennia", Duration.ofSeconds(31556952L * 1000L)),
        
        ERAS("Eras", Duration.ofSeconds(31556952L * 1000_000_000L)),
       
        FOREVER("Forever", Duration.ofSeconds(Long.MAX_VALUE, 999_999_999));
    
        private final String name;
        private final Duration duration;
    
        private ChronoUnit(String name, Duration estimatedDuration) {
            this.name = name;
            this.duration = estimatedDuration;
        }
     
    }
    ChronoField枚举
    public enum ChronoField implements TemporalField {
    
        NANO_OF_SECOND("NanoOfSecond", NANOS, SECONDS, ValueRange.of(0, 999_999_999)),
        
        NANO_OF_DAY("NanoOfDay", NANOS, DAYS, ValueRange.of(0, 86400L * 1000_000_000L - 1)),
        
        MICRO_OF_SECOND("MicroOfSecond", MICROS, SECONDS, ValueRange.of(0, 999_999)),
        
        MICRO_OF_DAY("MicroOfDay", MICROS, DAYS, ValueRange.of(0, 86400L * 1000_000L - 1)),
        
        MILLI_OF_SECOND("MilliOfSecond", MILLIS, SECONDS, ValueRange.of(0, 999)),
        
        MILLI_OF_DAY("MilliOfDay", MILLIS, DAYS, ValueRange.of(0, 86400L * 1000L - 1)),
        
        SECOND_OF_MINUTE("SecondOfMinute", SECONDS, MINUTES, ValueRange.of(0, 59), "second"),
        
        SECOND_OF_DAY("SecondOfDay", SECONDS, DAYS, ValueRange.of(0, 86400L - 1)),
        
        MINUTE_OF_HOUR("MinuteOfHour", MINUTES, HOURS, ValueRange.of(0, 59), "minute"),
        
        MINUTE_OF_DAY("MinuteOfDay", MINUTES, DAYS, ValueRange.of(0, (24 * 60) - 1)),
        
        HOUR_OF_AMPM("HourOfAmPm", HOURS, HALF_DAYS, ValueRange.of(0, 11)),
        
        CLOCK_HOUR_OF_AMPM("ClockHourOfAmPm", HOURS, HALF_DAYS, ValueRange.of(1, 12)),
        
        HOUR_OF_DAY("HourOfDay", HOURS, DAYS, ValueRange.of(0, 23), "hour"),
        
        CLOCK_HOUR_OF_DAY("ClockHourOfDay", HOURS, DAYS, ValueRange.of(1, 24)),
        
        AMPM_OF_DAY("AmPmOfDay", HALF_DAYS, DAYS, ValueRange.of(0, 1), "dayperiod"),
        
        DAY_OF_WEEK("DayOfWeek", DAYS, WEEKS, ValueRange.of(1, 7), "weekday"),
    ALIGNED_DAY_OF_WEEK_IN_MONTH(
    "AlignedDayOfWeekInMonth", DAYS, WEEKS, ValueRange.of(1, 7)),
    ALIGNED_DAY_OF_WEEK_IN_YEAR(
    "AlignedDayOfWeekInYear", DAYS, WEEKS, ValueRange.of(1, 7)), DAY_OF_MONTH("DayOfMonth", DAYS, MONTHS, ValueRange.of(1, 28, 31), "day"), DAY_OF_YEAR("DayOfYear", DAYS, YEARS, ValueRange.of(1, 365, 366)), EPOCH_DAY("EpochDay", DAYS, FOREVER, ValueRange.of((long) (Year.MIN_VALUE * 365.25), (long) (Year.MAX_VALUE * 365.25))), ALIGNED_WEEK_OF_MONTH("AlignedWeekOfMonth", WEEKS, MONTHS, ValueRange.of(1, 4, 5)), ALIGNED_WEEK_OF_YEAR("AlignedWeekOfYear", WEEKS, YEARS, ValueRange.of(1, 53)), MONTH_OF_YEAR("MonthOfYear", MONTHS, YEARS, ValueRange.of(1, 12), "month"), YEAR("Year", YEARS, FOREVER, ValueRange.of(Year.MIN_VALUE, Year.MAX_VALUE), "year"), private final String name; private final TemporalUnit baseUnit; private final TemporalUnit rangeUnit; private final ValueRange range; private final String displayNameKey; private ChronoField(String name, TemporalUnit baseUnit, TemporalUnit rangeUnit, ValueRange range) { this.name = name; this.baseUnit = baseUnit; this.rangeUnit = rangeUnit; this.range = range; this.displayNameKey = null; } }

       

  • 相关阅读:
    并发编程之多线程(理论部分)
    基于TCP和UDP的socket
    ajax笔记 显示出所城市名称 ShowCity.aspx Html代码
    蒸饭的纱布
    ajax 笔记--不刷新实现简单的留言版 guestBook
    从表的第几条取到第几条记录
    在asp.net添加数据到XML里去
    ajax 笔记-- 写了一个不用刷新就能实现--用户名验证的例子
    今天生日
    ajax 笔记不用刷新实现数据的分页显示
  • 原文地址:https://www.cnblogs.com/JackpotHan/p/10763678.html
Copyright © 2011-2022 走看看