LOCALDATE, 和 localdateti к LocalTime

Ниже перечислена вся моя копия https://mp.weixin.qq.com/s/FNsyV4skO4NauynR2igp5A

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

1. Обзор

Java 8 до даты и времени вводит новый API для того, чтобы устранить недостатки старого java.util.Date и java.util.Calendar.

В рамках этой статьи, давайте начнем с некоторыми из существующей Даты и Calendar API проблем, чтобы исследовать новую Дату Java 8 и время API, как решить эти проблемы.

Мы также будем участвовать в библиотеки времени практики в Java 8 основных классов, таких как LocalDate, МестноеВремя, LocalDateTime, ZonedDateTime, период, продолжительность и их апи.

2. Старое время API (до java8) проблема

  • Поточно-- Дата и Календарь классы не являются поточно-, что затрудняет разработчик отлаживать параллелизм выдает этот API, вам нужно писать дополнительный код для обработки безопасности потоков. Новые даты и время API Java 8 вводятся неизменны и поточно-, так что эти болевые точки, которые будут рассмотрены.

  • дизайн API и легко понять - старое время апите очень трудно понять, операция очень сложная, очень запутанный, не обеспечивают некоторый общий анализ и метод преобразования. Новый API этого время ISO-ориентированный, и следовать последовательной дату модели предметной области, времени, продолжительности и периодам. Это дает некоторые очень практические способы поддержки наиболее распространенных операций. Упаковочные операции больше не требуется некоторое время, чтобы сами класса.

  • ZonedDate и время - развиваться в старое время апи должен написать дополнительную логику, чтобы иметь дело со старой логикой времени API зоны, используя новый API, вы можете использовать Local и ZonedDate / время API для обработки часового пояса. Зона проблема преобразования не слишком много беспокойства.

3. Используйте LocalDate, LocalTime и LocalDateTime

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

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

3.1. Использование LocalDate

LocalDate указывает дату без каких-либо определенного времени в формате ISO (YYYY-MM-DD) под.

Часто используется, чтобы указать дату рождения или мзду нашей наибольшей озабоченности.

Получить текущую дату в системных часах, а именно:

LOCALDATE LOCALDATE = localdate.now ();

 

 

Он представляет собой конкретный день, месяц и год LocalDate использование «» методы или использовать «разобрать» доступный метод. Например, следующий фрагмент кода от имени 20 февраля 2015 года в LocalDate:

LocalDate.of (2015, 02, 20 ); 
LocalDate.parse ( "2015-02-20");

 

 

Это не очень интуитивно и легко сделать! LocalDate предлагает множество практических методов для получения различной информации о дате. Давайте быстро посмотрим на эти методы API.

Следующий фрагмент кода получает текущую местную дату и добавить день:

завтра LocalDate = LocalDate.now () plusDays (1).

 

 

Этот пример получает текущую дату и вычесть один месяц. Обратите внимание на то, как это принято в качестве перечисления единицы времени:

LocalDate previousMonthSameDay = LocalDate.now () минус (1, ChronoUnit.MONTHS).

 

 

В следующих двух примерах кода, мы проанализировали дату «2016-06-12» и получить один день недели и месяц соответственно. Обратите внимание, что возвращаемое значение является первым объектом DayOfWeek, в то время как второй представлена ​​порядкового значения INT месяц:

DayOfWeek воскресенье = LocalDate.parse ( "2016-06-12" ) .getDayOfWeek ();
Int двенадцать = LocalDate.parse ( "2016-06-12") getDayOfMonth ().

 

 

Мы можем проверить, происходит ли дата в високосный год, если старый способ не бояться Бога:

булева leapYear = LocalDate.now () ISLEAPYEAR ().

 

 

Суждение есть дата:

булева NotBefore = LocalDate.parse ( "2016-06-12") isBefore (LocalDate.parse ( "2016-06-11". ));
булева isAfter = LocalDate.parse ( "2016-06-12") isAfter (LocalDate.parse ( "2016-06-11")).

 

 

Дата граница может быть получена из указанной даты. В следующих двух примерах мы получаем LocalDateTime, который представляет собой заданную дату, чтобы начать день (2016-06-12T00: 00) и представляет собой начало LocalDate (2016-06-01):

LocalDateTime beginningOfDay = LocalDate.parse ( "2016-06-12" ) .atStartOfDay (); 
LocalDate firstDayOfMonth = LocalDate.parse ( "2016-06-12" ) 
 .с (TemporalAdjusters.firstDayOfMonth ());

 

 

Теперь давайте посмотрим на то, как мы используем местное время.

3.2. Использование LocalTime

Он представляет время без даты по местному времени.

Аналогично LocalDate и может «разобрать» и создание МестноеВремя экземпляр «» от часов системы или способа, используемого. Беглый обзор некоторых из следующего общего API.

LocalTime может быть создан из текущего экземпляра системного тактового сигнала, следующим образом:

LocalTime Теперь = LocalTime.now ();

 

 

В следующем примере кода мы создаем представление, анализируя строковое представление МестноеВремя 06:30:

LocalTime sixThirty = LocalTime.parse ( "06:30");

 

 

Метод «из» может быть использован для создания МестноеВремя. Например, используя следующий код «» Метод создания представляет МестноеВремя 06:30:

LocalTime sixThirty = LocalTime.of (6, 30);

 

 

В следующем примере LocalTime создается путем разбора строки, и с помощью «плюс» API, чтобы добавить один час. В результате будут представители 7:30 AM МестноеВремя:

LocalTime sevenThirty = LocalTime.parse ( "6:30") плюс (1, ChronoUnit.HOURS).

 

 

Различные способы могут быть использованы для получения конкретного геттер единицу времени, например, часы, минуты и секунды, получая часов следующим образом:

INT шесть = LocalTime.parse ( "6:30") getHour ().

 

 

LOCALDATE же, как проверки, является ли определенное время в определенный момент времени до или после другого. Следующий пример кода является сравнение двух МестноеВремя верно:

булева isbefore = LocalTime.parse ( "06:30") isBefore (LocalTime.parse ( "07:30")).

 

 

Максимальное, минимальное и полдень время может быть получено МестноеВремя константы класса дня. При выполнении запроса к базе данных, чтобы найти запись в течение определенного периода времени, который является очень полезным. Например, следующие кодовые представители 23: 59: 59,99:

LocalTime maxTime = LocalTime.MAX

 

 

Теперь давайте понять LocalDateTime.

3.3. Использование LocalDateTime

Композицию LocalDateTime для представления даты и времени.

Когда нам нужно объединить дату и время, которое является наиболее распространенным типом. Этот класс предлагает различные API, мы представим некоторые из наиболее часто используемых API.

LocalTime LocalDate и подобные примеры LocalDateTime приобрели от системных часов:

LocalDateTime.now ();

 

 

В следующем примере кода объясняет, как использовать завод «из» и «разобрать» метод создает экземпляр. Результат будет репрезентативные примеры LocalDateTime 2015 Нянь 2 Yue 20 Ri 06:30 АМ:

LocalDateTime.of (2015, Month.FEBRUARY, 20, 06, 30 ); 
LocalDateTime.parse ( "2015-02-20T06: 30: 00");

 

 

Есть некоторые практические вычисления времени API может поддерживать определенную единицу времени, например, дни, месяцы, годы и минут. В следующем примере кода демонстрируется использование «плюс» и метод «минус». Поведение этих API и LocalDate и LocalTime точно так же API:

localdatetime.plusdays (1 ); 
localdatetime.minushours ( 2);

 

 

Getter способ извлечь определенную единицу, как дата и время занятий. Учитывая LocalDateTime выше примера, следующий пример кода возвращает месяц в феврале:

localDateTime.getMonth ();

 

 

4. 使用 ZonedDateTime API,

Когда мы должны иметь дело с определенной датой и часовым поясом, Java 8 обеспечивает класс ZonedDateTime. ZoneId является идентификатором для представления различных регионов. Около 40 различных часовых поясов, используя ZoneId представлять их, как показано ниже

Следующий код, который мы должны получить в соответствии с «/ Шанхай Азии» Часовой пояс:

ZoneId ZoneId = ZoneId.of ( "Аиса / Шанхай");

 

 

Получите все часовой пояс:

Set <String> allZoneIds = ZoneId.getAvailableZoneIds ();

 

 

LocalDateTime преобразованы времени в конкретной временной зоне:

ZonedDateTime zonedDateTime = ZonedDateTime.of (LocalDateTime, ZoneId);

 

 

ZonedDateTime предоставляют аналитические методы, чтобы получить конкретную временную зону даты:

ZonedDateTime.parse ( "2015-05-03T10: 15: 30 + 01: 00 [Аиса / Шанхай]");

 

 

Другой способ заключается в использовании часового пояса OffsetDateTime. Datetime OffsetDateTime будучи неизменяемым смещением представления. Такие магазины все поля даты и времени, с точностью до наносекунд и от UTC / Гринвич смещение. Вы можете использовать ZoneOffset создать экземпляр OffsetDateTime. Здесь мы создаем LocalDateTime представлять 6:30 20 февраля, 2015 Утро:

LocalDateTime LocalDateTime = LocalDateTime.of (2015, Month.FEBRUARY, 20, 06, 30);

 

 

Затем мы добавляем два часа, чтобы подать пример, создав LocalDateTime и ZoneOffset:

ZoneOffset смещение = ZoneOffset.of ( "+ 2:00" ); 
OffsetDateTime offSetByTwo = OffsetDateTime.of (LocalDateTime, смещение);

 

 

Наше местное время даты теперь 2015-02-20 6:30 +02: 00. Теперь давайте продолжим обсуждать, как использовать Период и значения даты и времени модификации класса Продолжительность.

5. Период и продолжительность

  • Период: в течение двух дат (дата) промежутки времени.

  • Продолжительность: два для расчета интервалов (в секундах наносекунд) времени.

5.1. Использование Период

классы Периода широко используется для изменения значения заданной даты или получения разницы между двумя датами:

LocalDate initialDate = LocalDate.parse ( "2007-05-10" ); 
LocalDate finalDate = initialDate.plus (Period.ofDays (5));

 

 

Существует различные методы геттерных классов Периода, такие как getYears, getMonths и getDays период от целевого сбора стоимости. Следующий пример кода возвращает Int значение 5, обратную операцию, основанную на приведенном выше примере:

Int пять = Period.between (finalDate, initialDate) .getDays ();

 

 

Период может быть получен в течение двух дней или месяцев между датой или количеством лет, в определенной ячейке, используя ChronoUnit.between:

Int пять = ChronoUnit.DAYS.between (finalDate, initialDate);

 

 

Этот пример кода возвращает пять дней. Давайте продолжим смотреть на класс Duration.

5.2. Использование Продолжительность

Точно так же период, класс длительности, который используется для обработки времени. В следующем коде мы создаем 6:30 утра по местному времени, а затем добавить длительность 30 секунд, так что местное время 6:00 утра тридцать минут и 30 секунд:

LocalTime initialTime = LocalTime.of (6, 30, 0 ); 
LocalTime finalTime = initialTime.plus (Duration.ofSeconds (30));

 

 

Продолжительность между двумя моментами, как продолжительность или получить в качестве конкретных единиц. В первом фрагменте кода, мы использовали BETWEEN () класса Продолжительность метода, чтобы найти разницу во времени между finalTime и initialTime, и возвращает разницу в секундах:

Int тридцать = Duration.between (finalTime, initialTime) .getSeconds ();

 

 

Во втором примере, мы используем между () метод класса ChronoUnit выполнять ту же операцию:

Int тридцать = ChronoUnit.SECONDS.between (finalTime, initialTime);

 

 

Теперь давайте посмотрим, как преобразовать старую дату и календарь для новой даты и времени.

6. Совместимость с датой и календарем

Java 8 Добавлено toInstant () метод, который позволяет конвертировать старые примеры API календарной даты и времени Дата нового API, как следующий фрагмент кода:

LocalDateTime.ofInstant (date.toInstant (), ZoneId.systemDefault ()); 
LocalDateTime.ofInstant (calendar.toInstant (), ZoneId.systemDefault ());

 

 

LocalDateTime может быть построен из следующего метода «ofEpochSecond». Следующий код приведет представитель 2016-06-13T11: LocalDateTime 50: 34:

LocalDateTime.ofEpochSecond (1465817690, 0, ZoneOffset.UTC);

 

 

Теперь давайте продолжим с формата даты и времени.

7. Дата и формат времени

Java 8 предоставляет API для простого форматирования даты и времени:

LocalDateTime LocalDateTime = LocalDateTime.of (2015, Month.JANUARY, 25, 6, 30);

 

 

Следующий код передается в формат формат даты ISO местной даты. Результат будет 2015-01-25:

Строка localDateString = localDateTime.format (DateTimeFormatter.ISO_DATE);

 

 

DateTimeFormatter предлагает множество стандартных опций форматирования. Режим также может обеспечивать пользовательскую форматированию методы, как показано ниже, он возвращается к LocalDate 2015/01/25:

localDateTime.format (DateTimeFormatter.ofPattern ( "YYYY / ММ дд /"));

 

 

Мы можем применить стили форматирования передаются короткие, длинные СРЕДНИЙ или как часть параметров форматирования. Следующий выходной образец кода потерял 25 января 2015 6:30:00 мне:

LocalDateTime 
 .format (DateTimeFormatter.ofLocalizedDateTime (FormatStyle.MEDIUM) 
 .withLocale (Locale.UK);

 

 

И, наконец, давайте посмотрим на альтернативный Java 8 Основные даты / времени API доступны.

8. В качестве альтернативы

8,1 Threeten библиотека

Для Java 6 или Java 7 из этих старых проектов можно использовать Threeten, а затем, как и в предыдущем использовании Java 8 той же функция, как только вы переходите на Java-нужно только изменить код, не изменяя путь пакета:

<зависимость> 
    <идентификатор_группы> org.threeten </ идентификатор_группы> 
    <артефакт> threetenbp </ артефакт> 
    <версия> Последнюю </ версия> 
</ зависимость>

 

 

библиотека 8,2 Joda времени

Другой альтернативой Java 8 является дата и время библиотека Joda времени библиотека. В самом деле, Java 8 Дата Время API возглавляет Joda-Time Library (Stephen Колборн) и Oracle. Библиотека предлагает почти все функции 8 Даты поддержки Времени проекта Java. По ссылке на следующий п зависимостей в проекте может быть использовано немедленно:

<зависимость> 
    <идентификатор_группы> Joda время </ идентификатор_группы> 
    <артефакта> Joda время </ артефакт> 
    <версия> Последнюю </ версия> 
</ зависимость>

 

рекомендация

отwww.cnblogs.com/yutf/p/11280775.html