Java 8經過發佈新的Date-Time API (JSR 310)來進一步增強對日期與時間的處理。java.util.Date和SimpleDateFormatter都不是線程安全的,而LocalDate和LocalTime和最基本的String同樣,是不變類型,不但線程安全,並且不能修改。如下爲一些經常使用時間對象:java
一、LocalDategit
LocalDate now = LocalDate.now(); LocalDate now1 = LocalDate.now(Clock.systemUTC()); System.out.println(now); System.out.println(now1); LocalDate of = LocalDate.of(2019, 3, 6); //嚴格按照ISO yyyy-MM-dd驗證,03寫成3都不行 LocalDate parse = LocalDate.parse("2019-03-06"); System.out.println(of); System.out.println(parse); System.out.println("**************now****************"); //當前開始時間 System.out.println(now.atStartOfDay()); //當月第一天日期 System.out.println(now.with(TemporalAdjusters.firstDayOfMonth())); //本月次日日期 System.out.println(now.withDayOfMonth(2)); //當月最後一天 System.out.println(now.with(TemporalAdjusters.lastDayOfMonth())); System.out.println(now.getDayOfMonth()); //當月下一天 System.out.println(now.plusDays(1)); //當月上一天 System.out.println(now.minusDays(1)); System.out.println(now.getDayOfWeek()); //當月下一週 System.out.println(now.plusWeeks(1)); //當月上一週 System.out.println(now.minusWeeks(1)); System.out.println(now.getMonth() + "-" + now.getMonthValue()); //當月下一個月 System.out.println(now.plusMonths(1)); //當月上一個月 System.out.println(now.minusMonths(1)); //時間比較 System.out.println(now.isEqual(LocalDate.of(2019, 03, 06)));
二、LocalTimegithub
LocalTime now = LocalTime.now(); //指定時區 LocalTime now1 = LocalTime.now(Clock.system(ZoneId.systemDefault())); LocalTime now2 = LocalTime.now(Clock.systemUTC()); System.out.println(now); System.out.println(now1); System.out.println(now2); System.out.println("************now************"); //清除毫秒位 System.out.println(now.withNano(0)); //獲取當前的小時 System.out.println(now.getHour()); //解析時間時間也是按照ISO格式識別,但能夠識別如下3種格式: 12:00 12:01:02 12:01:02.345 System.out.println(LocalTime.parse("11:58:12")); //時間比較 LocalTime other = LocalTime.of(13, 45, 59); System.out.println(now.isBefore(other)); System.out.println(now.isAfter(other));
三、LocalDateTime安全
LocalDateTime now = LocalDateTime.now(); LocalDateTime now1 = LocalDateTime.now(Clock.system(ZoneId.systemDefault())); LocalDateTime now2 = LocalDateTime.now(Clock.systemUTC()); System.out.println(now); System.out.println(now1); System.out.println(now2);
//時間格式轉換 System.out.println(now.format(DateTimeFormatter.ofPattern(PATTERN_1))); System.out.println(now.format(DateTimeFormatter.ofPattern(PATTERN_2))); System.out.println(now.format(DateTimeFormatter.ofPattern(PATTERN_3)));
四、Date轉換爲LocalDateTimespa
/** * Date轉換爲LocalDateTime * @return LocalDateTime */ public static LocalDateTime date2LocalDateTime() { Date date = new Date(); LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()); return localDateTime; }
五、LocalDateTime轉換爲Date線程
/** * LocalDateTime轉換爲Date * @return Date */ public static Date localDateTime2Date() { LocalDateTime now = LocalDateTime.now(); Instant instant = now.atZone(ZoneId.systemDefault()).toInstant(); Date date = Date.from(instant); return date; }
六、秒與納秒級別上的一段時間間隔code
/** * 秒與納秒級別上的一段時間 */ public static void duration() { LocalDateTime from = LocalDateTime.of(2018, Month.OCTOBER, 1, 0, 0, 0); LocalDateTime to = LocalDateTime.of(2019, Month.MARCH, 6, 23, 59, 59); Duration between = Duration.between(from, to); System.out.println(between.toDays()); System.out.println(between.toHours()); }