• Java 8 日期时间 API


    Java 8 日期时间 API
    Java 8 通过发布新的 Date-Time API (JSR 310) 来进一步加强对日期与时间的处理。

    在旧版的 Java 中,日期时间 API 存在诸多问题,其中有:

    • 非线程安全 − java.util.Date 是非线程安全的,所有的日期类都是可变的,这是 Java 日期类最大的问题之一。

    • 设计很差 − Java 的日期/时间类的定义并不一致,在 java.util 和 java.sql 的包中都有日期类,此外用于格式化和解析的类在 java.text 包中定义。java.util.Date 同时包含日期和时间,而 java.sql.Date 仅包含日期,将其纳入 java.sql 包并不合理。另外这两个类都有相同的名字,这本身就是一个非常糟糕的设计。

    • 时区处理麻烦 − 日期类并不提供国际化,没有时区支持,因此 Java 引入了 java.util.Calendar 和 java.util.TimeZone 类,但他们同样存在上述所有的问题。

    Java 8 在 java.time 包下提供了很多新的 API。以下为两个比较重要的 API:

    • Local(本地) − 简化了日期时间的处理,没有时区的问题。

    • Zoned(时区) − 通过制定的时区处理日期时间。

    新的 java.time 包涵盖了所有处理日期,时间,日期/时间,时区,时刻(instants),过程(during)与时钟(clock)的操作。

    import java.time.DayOfWeek;
    import java.time.LocalDate;
    import java.time.Month;
    import java.time.temporal.ChronoField;
    
    public class TestLocalDate {
        public static void main(String[] args) {
            LocalDate date = LocalDate.of(2018, 12, 2);
            int year = date.getYear();
            System.out.println(year);
    
            Month month = date.getMonth();
            System.out.println(month);
    
            int day = date.getDayOfMonth();
            System.out.println(day);
    
            DayOfWeek dow = date.getDayOfWeek();
            System.out.println(dow);
    
            int len = date.lengthOfMonth();
            System.out.println(len);
    
            boolean leap = date.isLeapYear();
            System.out.println(leap);
    
            LocalDate today = LocalDate.now();
            System.out.println(today);
    
            int year1 = date.get(ChronoField.YEAR);
            int month1 = date.get(ChronoField.MONTH_OF_YEAR);
            int day1 = date.get(ChronoField.DAY_OF_MONTH);
            System.out.println(year1 + "-" + month1 + "-" + day1);
        }
    }
    

    点击查看结果

    ``` 2018 DECEMBER 2 SUNDAY 31 false 2018-12-02 2018-12-2 ```

    import java.time.LocalDate;
    import java.time.LocalDateTime;
    import java.time.LocalTime;
    import java.time.Month;
    
    public class TestLocalDateTime {
        public static void main(String[] args) {
            // 2014-03-18T13:45:20
            LocalDateTime dt1 = LocalDateTime.of(2014, Month.MARCH, 18, 13, 45, 20);
            LocalDate date = LocalDate.of(2018, 3, 18);
            LocalTime time = LocalTime.of(13, 45, 20);
            LocalDateTime dt2 = LocalDateTime.of(date, time);
            LocalDateTime dt3 = date.atTime(13, 45, 20);
            LocalDateTime dt4 = date.atTime(time);
            LocalDateTime dt5 = time.atDate(date);
            System.out.println("dt1:" + dt1);
            System.out.println("dt2:" + dt2);
            System.out.println("dt3:" + dt3);
            System.out.println("dt4:" + dt4);
            System.out.println("dt5:" + dt5);
    
            LocalDate date1 = dt1.toLocalDate();
            LocalTime time1 = dt1.toLocalTime();
            System.out.println("date1:" + date1);
            System.out.println("time1:" + time1);
        }
    }
    

    点击查看结果

    ``` dt1:2014-03-18T13:45:20 dt2:2018-03-18T13:45:20 dt3:2018-03-18T13:45:20 dt4:2018-03-18T13:45:20 dt5:2018-03-18T13:45:20 date1:2014-03-18 time1:13:45:20 ```

    import java.time.LocalDate;
    import java.time.LocalTime;
    
    public class TestLocalTime {
        public static void main(String[] args) {
            LocalTime time = LocalTime.of(13, 45, 20);
            int hour = time.getHour();
            int minute = time.getMinute();
            int second = time.getSecond();
            System.out.println(hour + ":" + minute + ":" + second);
    
            LocalDate date1 = LocalDate.parse("2014-03-18");
            LocalTime time1 = LocalTime.parse("13:45:20");
            System.out.println(date1);
            System.out.println(time1);
        }
    }
    

    点击查看结果

    ``` 13:45:20 2014-03-18 13:45:20 ```

    参考链接

  • 相关阅读:
    Python冒泡算法和修改配置文件
    第五章:处理数据
    第四章:持久存储
    Python之打印99乘法表
    Python之编写登录接口
    Python之文件操作
    第三章:文件与异常
    FineUI 修改config表属性
    FineUI Grid中WindowField根据列数据决定是否Enalble
    表之间不同字段的数据复制
  • 原文地址:https://www.cnblogs.com/hgnulb/p/10055231.html
Copyright © 2020-2023  润新知