新的日期/時間API中,全部的類都是不可變的,這對多線程環境有好處。html
好比:LocalDateTimejava
新的API將人可讀的日期時間和機器時間(unix timestamp)明確分離,它爲日期(Date)、時間(Time)、日期時間(DateTime)、時間戳(unix timestamp)以及時區定義了不一樣的類。api
不一樣時間分解成了各個類,好比:LocalDate, LocalTime, LocalDateTime, Instant,Year,Month,YearMonth,MonthDay,DayOfWeek等,知足各類不一樣場景使用需求。安全
在全部的類中,方法都被明肯定義用以完成相同的行爲。多線程
舉個例子,要拿到當前實例咱們可使用now()方法,在全部的類中都定義了format()和parse()方法,而不是像之前那樣專門有一個獨立的類。方法明確,清晰,統一,方便好記。函數
(至關於不少工具方法,再也不須要咱們本身封裝了):全部新的日期/時間API類都實現了一系列方法用以完成通用的任務,如:加、減、格式化、解析、從日期/時間中提取單獨部分,等等。工具
好比:LocalDateTime,包含很是豐富的實用操做(轉換,獲取各個字段,修改字段,增長和減小等)。spa
再也不侷限於一次只能改變它的 一個值,而且你還可按照需求定義本身的日期轉換器。好比:將日期調整到下個週日、下個工做日,或者是本月的最後一天。.net
lastDayOfMonth 建立一個新的日期,它的值爲當月的最後一天。線程
(1)new Date(2019,01,01)
實際是3919年2月。由於Date的構造函數 的年份表示的始於1900年的差值。
LocalDate建立實例:
LocalDate localDate = LocalDate.of(2019, 1, 1);
(2)month是從0開始的。
LocalDate month是從1開始的:
LocalDate localDate = LocalDate.of(2019, 1, 1);
System.out.println(localDate.getMonthValue());
輸出是1
(3)DAY_OF_WEEK 的取值,是從週日(1)開始的。
LocalDate week是從週一(1)開始的:
LocalDate localDate = LocalDate.of(2019, 1, 1);
System.out.println(localDate.getDayOfWeek());
System.out.println(localDate.getDayOfWeek().getValue());
輸出
TUESDAY
2
(4)Date若是不格式化,打印出的日期可讀性差。
LocalDate的輸出,清晰。
LocalDate localDate = LocalDate.of(2019, 1, 1);
System.out.println(localDate.getMonthValue());
System.out.println(localDate.toString());
輸出:
2019-01-01
(5)日期類並不提供國際化,沒有時區支持
java8的時間類都支持了時區操做。
例如:LocalDateTime
//中國時間,輸出時不包含時區 LocalDateTime ldt = LocalDateTime.now(ZoneId.of("Asia/Shanghai")); System.out.println(ldt); //意大利羅馬時間,輸出時包含時區 ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("Europe/Rome")); System.out.println(zdt);
輸出
2019-12-20T23:17:07.914 2019-12-20T16:17:07.915+01:00[Europe/Rome]
(1)Date、Calendar可變性,線程安全問題
java8中全部類都是final修飾的,每次修改都會生成新的副本。
(2)DateFormat和SimpleDateFormat線程安全問題
java8中的DateTimeFormatter也是不可變的,源碼:
好比,增長一天。
LocalDate localDate = LocalDate.of(2019, 1, 1); LocalDate localDate2 = localDate.plusDays(1); System.out.println("localDate:"+localDate); System.out.println("localDate2:"+localDate2);
輸出:
localDate:2019-01-01
localDate2:2019-01-02
參考:https://blog.csdn.net/wangsun300/article/details/103403490