Узнайте о классе 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. Мы научились создавать экземпляры с помощью фабричных методов и конструкторов. Затем мы узнали о других вариантах использования, таких как разбор и форматирование временных меток.
Мы также научились добавлять длительность и периоды к локальным временным меткам.