Java12都要出來了弧械,你還在使用Date操作日期嗎八酒?
如果你想要用Date表示Java8的發(fā)布日期(2014年3月18日),需要創(chuàng)建這樣的Date實例:
Date date = new Date(114, 2, 18);
要是我不告訴你這表示的是2014年3月你是不是還以為這是114年2月刃唐。
另外羞迷,對于時間的格式化類DatteForm類不是線程安全的,也就是說如果兩個線程嘗試使用同一個formatter解析日期画饥,你可能會得到無法預期的結果闭树。
使用LocalDate和LocalTime
LocalDate
該類的實例是一個不可變對象,只提供簡單的日期荒澡,不含當天的時間信息报辱,不附帶任何與時區(qū)相關的信息。
以下是它的使用方法:
LocalDate date = LocalDate.of(2014, 3, 18);// 2014-03-18
int yeat = date.getYear();// 2014
Month month = date.getMonth();// MARCH
int day = date.getDayOfMonth();// 18
DayOfWeek dow = date.getDayOfWeek();// TUESDAY
int len = date.getlengthOfMonth();// 31
boolean leap = date.isLeapYear();// false
這個api
跟我們正常的思維很相近,一眼就能看出來這表示的是哪一天碍现。
另外獲取當前日期的方法:
LocalDate date = LocalDate.now();
使用統(tǒng)一的get()
方法:
int year = date.get(ChronoField.year);
int month = date.get(ChronoField.MONTH_OF_YEAR);
int day = date.get(ChronoField.DAY_OF_MONTH);
LocalTime
表示一天中的時間幅疼,可以使用LocalTime
:
LocalTime time = LocalTime.of(13, 45, 20);// 12:45:20
int hour = time.getHour();// 13
int minute = time.getMinute();// 45
int second = time.getSecond();// 20
使用字符串創(chuàng)建LocalDate和LocalTime
使用parse
方法:
LocalDate date = LocalDate.parse("2014-03-18");
LocalTime time = LocalTime.parse("13:45:20");
這個創(chuàng)建方法是不是怎么看怎么順眼。
合并日期和時間LocalDateTime
LocalDateTime是LocalDate和LocalTime的合體昼接,同時表示了日期和時間爽篷,但是不帶有時區(qū)信息。
// 2014-03-18T13:45:20
LocalDateTime dt1 = LocalDateTime.of(2014, Month.MARCH, 18, 13, 45, 20);
LocalDateTime dt2 = LocalDateTime.of(date, time);
LocalDateTime dt3 = date.atTime(13, 45, 20);
LocalDateTime dt3 = time.atDate(date);
相互轉換:
LocalDate date1 = dt1.toLocalDate();
LocalTime time1 = dt1.toLocalTime();
操縱慢睡、解析和格式化日期
以比較直觀的方式操縱LocalDate的屬性:
LocalDate date1 = LocalDate.of(2014, 3, 18);// 2014-03-18
LocalDate date2 = date1.withTear(2011);// 2011-03-18
LocalDate date3 = date2.withDayOfMonth(25);// 2011-03-25
LocalDate date4 = date3.with(ChronoField.MONTH_OF_TEAR, 9)// 2011-09-25
以相對方式修改LocalDate的屬性:
LocalDate date1 = LocalDate.of(2014, 3, 18);// 2014-03-18
LocalDate date2 = date1.plusWeeks(1);// 2014-03-25
LocalDate date3 = date2.minusYears(3);// 2011-03-25
LocalDate date4 = date3.plus(6, ChronoUnit.MONTHS);)// 2011-09-25