原文: https://howtodoinjava.com/java/date-time/java-localdatetime-class/

Java 8 中引入java.time.LocalDateTime类,表示没有时区信息的本地日期时间对象。 它表示达到纳秒精度的时间,例如 2007-12-03T10:15:30:55.123456789

我们可以使用LocalDateTime实例来表示时间,而无需任何时区引用。 例如,我们可以使用LocalDateTime在任何应用程序中触发批处理作业。 作业将在服务器所在的时区中的特定时间执行。

实际上,为了使其更有用,我们应该将LocalDateTime与其他信息(例如偏移或时区)一起使用。

注意,LocalDateTime实例是不可变的线程安全

1. LocalDateTime类声明

  1. public final class LocalDateTime
  2. extends Object
  3. implements Temporal, TemporalAdjuster, ChronoLocalDateTime<LocalDate>, Serializable
  4. {
  5. //class body
  6. }

2. 如何创建LocalDateTime

通常,我们将在两种情况下创建LocalDateTime实例,即获取当前时间或为指定时间戳创建本地日期时间。

2.1 获取当前时间

使用以下工厂方法获取当前本地日期时间。

  1. LocalDateTime now = LocalDateTime.now();

2.2 创建指定时间

要创建具有特定日期和时间信息的本地时间,请使用以下方法。

  1. //Milliseconds precision
  2. LocalDateTime localDateTime1 =
  3. LocalDateTime.of(2019, 03, 28, 14, 33, 48, 123456789);
  4. //Month enum
  5. LocalDateTime localDateTime2 =
  6. LocalDateTime.of(2019, Month.MARCH, 28, 14, 33, 48, 123456789);
  7. //seconds precision
  8. LocalDateTime localDateTime3 =
  9. LocalDateTime.of(2019, Month.MARCH, 28, 14, 33, 48);
  10. //minutes precision
  11. LocalDateTime localDateTime4 =
  12. LocalDateTime.of(2019, Month.MARCH, 28, 14, 33);
  13. //local date + local time
  14. LocalDate date = LocalDate.of(2109, 03, 28);
  15. LocalTime time = LocalTime.of(10, 34);
  16. LocalDateTime localDateTime5 = LocalDateTime.of(date, time);

3. 如何将字符串解析为LocalDateTime

LocalDateTime类具有两个重载的parse()方法,用于将字符串中的时间转换为本地时间实例。

  1. parse(CharSequence text) //1
  2. parse(CharSequence text, DateTimeFormatter formatter) //2
  • 如果字符串包含ISO_LOCAL_DATE_TIME模式中的时间,即2019-03-27T10:15:30,请使用第一种方法。 这是 Java 中本地时间的默认模式。
  • 对于其他任何日期时间模式,我们都需要使用第二种方法,在该方法中,我们将时间作为字符串传递,并且使用格式化器来表示该日期时间字符串的模式。
  1. //1 - default time pattern
  2. String time = "2019-03-27T10:15:30";
  3. LocalDateTime localTimeObj = LocalDateTime.parse(time);
  4. //2 - specific date time pattern
  5. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss a");
  6. String time1 = "2019-03-27 10:15:30 AM";
  7. LocalDateTime localTimeObj1 = LocalDateTime.parse(time1, formatter);

4. 如何将LocalDateTime格式化为字符串

使用LocalDateTime.format(DateTimeFormatter)方法将本地时间格式化为所需的字符串表示形式。

  1. DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss a");
  2. LocalDateTime now = LocalDateTime.now();
  3. String dateTimeString = now.format(formatter); //2019-03-28 14:47:33 PM

5. 如何修改本地时间

LocalDateTime提供以下方法,可用于相对于可用的localdatetime实例获取新的localdatetime实例。

  • plusYears()
  • plusMonths()
  • plusDays()
  • plusHours()
  • plusMinutes()
  • plusSeconds()
  • plusNanos()
  • minusYears()
  • minusMonths()
  • minusDays()
  • minusHours()
  • minusMinutes()
  • minusSeconds()
  • minusNanos()
  1. LocalDateTime now = LocalDateTime.now();
  2. //3 hours later
  3. LocalDateTime localDateTime1 = now.plusHours(3);
  4. //3 minutes earliar
  5. LocalDateTime localDateTime2 = now.minusMinutes(3);
  6. //Next year same time
  7. LocalDateTime localDateTime2 = now.plusYears(1);
  8. //Last year same time
  9. LocalDateTime localDateTime2 = now.minusYears(1);

6. LocalDateTime示例

比较LocalDateTime实例

LocalDateTime和日期之间转换

LocalDateTimeZonedDateTime之间转换

LocalDateTime格式转换为字符串

将字符串解析为LocalDateTime

在 Java 中将LocalDate转换为LocalDateTime

在评论中向我发送有关 Java 8 LocalDateTime类的问题。

学习愉快!

参考: LocalDateTime Java 文档