📜  讨论java.time包(1)

📅  最后修改于: 2023-12-03 15:28:05.964000             🧑  作者: Mango

讨论java.time包

Java 8中引入了java.time包,这个包提供了一组全新的日期和时间API,用于替代旧的java.util.Datejava.util.Calendar类。java.time包中的类具有以下优点:

  • 代码更加清晰简洁
  • 提供了更多的功能
  • 线程安全,可避免并发问题
日期时间类

java.time包中主要有以下几个日期时间类:

  • Instant:时间线上的一个瞬间,以1970年1月1日午夜开始的秒数表示。
  • LocalDate:表示一个日期,如2019-12-31。
  • LocalTime:表示一个时间,如20:30:00。
  • LocalDateTime:表示日期时间,如2019-12-31T20:30:00。
  • ZonedDateTime:表示带有时区的日期时间。

这些类都是不可变的,因此线程安全。

日期时间操作

java.time包中提供了许多日期时间操作的方法。例如:

  • plusHours(long hours):增加指定小时数。
  • minusDays(long days):减少指定天数。
  • withYear(int year):将年份设为指定值。
  • isAfter(ChronoLocalDateTime<?> other):判断是否在另一个日期时间之后。

此外,还有一些有用的方法,例如:

  • now():获取当前时间。
  • parse(CharSequence text, DateTimeFormatter formatter):将字符串解析为日期时间。
时区

ZonedDateTime类支持时区操作,可以使用ZoneId类来表示时区。例如:

ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of("Asia/Shanghai"));
格式化输出和解析

java.time包中的日期时间格式化类是DateTimeFormatter。我们可以使用它来将日期时间对象格式化为指定的字符串,也可以将字符串解析为日期时间对象。例如:

LocalDateTime dateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
String formattedDateTime = dateTime.format(formatter);
System.out.println(formattedDateTime); // 输出:2021/06/23 15:23:45

String dateString = "2021/06/23 15:23:45";
LocalDateTime parsedDateTime = LocalDateTime.parse(dateString, formatter);
System.out.println(parsedDateTime); // 输出:2021-06-23T15:23:45
总结

java.time包提供了一组全新的、功能更加强大且线程安全的日期时间API,可以很好地满足我们对日期时间的各种需求,强烈建议在Java 8及以上版本中使用。