Ниже перечислена вся моя копия 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 время </ артефакт> <версия> Последнюю </ версия> </ зависимость>