Java LocalDateTime

Узнайте о классе LocalDateTime в Java, о том, как создавать его экземпляры, а также о других вариантах использования, таких как синтаксический анализ, форматирование и добавление длительности и периодов.

1. Обзор

Класс java.time.LocalDateTime, представленный в Java 8 Date Time API, представляет объект даты и времени без часового пояса, часто рассматриваемый как «год-месяц-день-час-минута-секунда». Он представляет момент на локальной временной шкале с точностью до наносекунды, например, 2007-12-03T10:15:30:55.000000.

Мы можем использовать экземпляры LocalDateTime для представления временных меток без необходимости ссылки на часовой пояс или смещение. Если нам нужна временная метка в определенной зоне, то мы должны использовать экземпляр ZonedDateTime.

Например, мы можем использовать LocalDateTime для запуска пакетных заданий в любом приложении. Задания будут выполняться в определенное время в часовом поясе, где находится сервер.

Обратите внимание, что экземпляры LocalDateTime являются неизменяемыми и потокобезопасными. Это объявлено, как показано ниже в исходном коде Java.

public final class LocalDateTimeextends Objectimplements Temporal, TemporalAdjuster, ChronoLocalDateTime<LocalDate>, Serializable{//class body}

2. Создание LocalDateTime

Как правило, мы будем создавать экземпляры LocalDateTime в двух случаях: получать текущую временную метку или создавать локальные дату и время для указанных значений.

2.1. Получить текущую временную метку

Используйте метод now() для получения текущей локальной даты и времени. Обратите внимание, что мы можем получить текущую локальную временную метку в другой зоне, передав идентификатор зоны.

LocalDateTime now = LocalDateTime.now();//Current timestamp in UTCLocalDateTime utcTimestamp = LocalDateTime.now(ZoneId.of("UTC"));

2.2. Создание LocalDateTime со значениями

Чтобы создать локальную временную метку с конкретной информацией о дате и времени, используйте метод of(год, месяц, день, час, минута, секунда, наносекунда), который является перегруженным методом с необязательными аргументами.

//Nonoseconds precisionLocalDateTime localDateTime1 =LocalDateTime.of(2019, 03, 28, 14, 33, 48, 640000);//Using Month EnumLocalDateTime localDateTime2 =LocalDateTime.of(2019, Month.MARCH, 28, 14, 33, 48, 000000);//Seconds level precisionLocalDateTime localDateTime3 =LocalDateTime.of(2019, Month.MARCH, 28, 14, 33, 48);//Minutes level precisionLocalDateTime localDateTime4 =LocalDateTime.of(2019, Month.MARCH, 28, 14, 33);

2.3 Объединить LocalDate и LocalTime

Если у нас есть отдельные экземпляры классов LocalDate и LocalTime, то мы можем объединить их, чтобы получить экземпляр LocalDateTime.

//local date + local timeLocalDate date = LocalDate.of(2109, 03, 28);LocalTime time = LocalTime.of(10, 34);LocalDateTime localDateTime5 = LocalDateTime.of(date, time);

3. Анализ строки в LocalDateTime

Класс LocalDateTime имеет два перегруженных метода parse() для преобразования времени в строке в экземпляр LocalDateTime.

parse(CharSequence text) //1parse(CharSequence text, DateTimeFormatter formatter) //2
  • Используйте первый метод, если строка содержит время в шаблоне ISO_LOCAL_DATE_TIME, например 2019-03-27T10:15:30. Это шаблон по умолчанию LocalDateTime в Java.
  • Для любого другого шаблона даты и времени нам нужно использовать второй метод, в котором мы передаем время как строку, а также DateTimeFormatter, который представляет шаблон этой строки даты и времени.
//1 - default time patternString time = "2019-03-27T10:15:30";LocalDateTime localTimeObj = LocalDateTime.parse(time);//2 - specific date time patternDateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss a");String time1 = "2019-03-27 10:15:30 AM";LocalDateTime localTimeObj1 = LocalDateTime.parse(time1, formatter);

4. Форматирование LocalDateTime

Используйте метод LocalDateTime.format(DateTimeFormatter) для форматирования LocalDateTime в желаемое строковое представление.

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

5. Изменение LocalDateTime

LocalDateTime предоставляет ниже методы, которые можно использовать для получения нового экземпляра LocalDateTime относительно заданного экземпляра. Эти методы помогут в добавлении и вычитании дней к заданной временной метке.

  • plusГоды()
  • plusМесяцы()
  • plusDays()
  • plusHours()
  • плюсМинуты()
  • plusSeconds()
  • plusNanos()
  • минусГоды()
  • минусМесяцы()
  • minusDays()
  • минусЧасы()
  • minusMinutes()
  • минусСекунды()
  • минусНанос()
LocalDateTime now = LocalDateTime.now();//3 hours laterLocalDateTime localDateTime1 = now.plusHours(3);//3 minutes earliarLocalDateTime localDateTime2 = now.minusMinutes(3);//Next year same timeLocalDateTime localDateTime2 = now.plusYears(1);//Last year same timeLocalDateTime localDateTime2 = now.minusYears(1);

6. Заключение

В этом уроке мы узнали о классе LocalDate в Java. Мы научились создавать экземпляры с помощью фабричных методов и конструкторов. Затем мы узнали о других вариантах использования, таких как разбор и форматирование временных меток.

Мы также научились добавлять длительность и периоды к локальным временным меткам.

Исходный код Скачать

Прокрутить вверх