日期

日期时间 属于 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 编辑 该链接会在新窗口或标签页中打开

学习 日期时间