軌道
/
Java
Java
/
課程大綱
/
日期時間
日期

日期時間 在 Java

6 個練習

關於 日期時間

Java 8 推出的java.time套件內含數個用來處理日期與時間的類別。

LocalDate

java.time.LocalDate類別代表 ISO-8601 曆法 中沒有時區的日期,例如2007-12-03:

LocalDate date = LocalDate.of(2007, 12, 3);

日期可以和其他的日期相比較:

LocalDate date1 = LocalDate.of(2007, 12, 3);
LocalDate date2 = LocalDate.of(2007, 12, 4);

date1.isBefore(date2);
// => true

date1.isAfter(date2);
// => false

LocalDate實例有 getter 可以取得其中各個時間部分:

LocalDate date = LocalDate.of(2007, 12, 3);

date.getYear();
// => 2007

date.getMonthValue();
// => 12

date.getDayOfMonth();
// => 3

LocalDate實例也有方法可以為它加上時間單位。

Note

這些方法會回傳一個_新的_LocalDate實例,不會更新現有的實例,因為LocalDate類別是不可變的。

LocalDate date = LocalDate.of(2007, 12, 3);

date.plusDays(3);
// => 2007-12-06

date.plusMonths(1);
// => 2008-01-03

date.plusYears(1);
// => 2008-12-03

LocalDateTime

java.time.LocalDateTime類別代表 ISO-8601 曆法 中沒有時區的日期時間,例如2007-12-03T10:15:30:

LocalDateTime datetime = LocalDateTime.of(2007, 12, 3, 10, 15, 30);

datetime.getYear();
// => 2007

datetime.getMonthValue();
// => 12

datetime.getDayOfMonth();
// => 3

datetime.getHours();
// => 10

datetime.getMinutes();
// => 15

datetime.getSeconds();
// => 30

和LocalDate類別一樣,LocalDateTime實例也有相同的方法可以和其他LocalDateTime相比較,以及為它加上時間單位。

此外,也可以把LocalDate實例轉換成LocalDateTime:

LocalDate date = LocalDate.of(2007, 12, 3);
LocalDateTime datetime = date.atTime(10, 15, 30);
datetime.toString();
// => "2007-12-03T10:15:30"

格式化日期時間

LocalDate和LocalDateTime在與String互相轉換時,都採用 ISO-8601 標準標記法。

LocalDateTime datetime = LocalDateTime.of(2007, 12, 3, 10, 15, 30);
LocalDateTime parsed = LocalDateTime.parse("2007-12-03T10:15:30");

datetime.isEqual(parsed);
// => true

如果想用不同的格式,像這樣從String解析出LocalDate或LocalDateTime是行不通的。 要改用自訂格式來格式化日期,則應該使用java.time.format.DateTimeFormatter:

DateTimeFormatter parser = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDate date = LocalDate.parse("03/12/2007", formatter);

DateTimeFormatter printer = DateTimeFormatter.ofPattern("MMMM d, yyyy");
printer.format(date);
// => "December 3, 2007"

建立自訂格式時也可以指定地區設定,以便針對不同地區格式化與解析:

DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.FRENCH).format(date);
// => décembre 3, 2007

DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.of("pt")).format(date);
// => dezembro 3, 2007
透過 GitHub 編輯 連結會在新視窗或分頁中開啟

學習 日期時間