Date & Time in Java SE 8
Upcoming SlideShare
Loading in...5
×
 

Date & Time in Java SE 8

on

  • 794 views

Java SE 8 new Time Date API. Introduction.

Java SE 8 new Time Date API. Introduction.

Statistics

Views

Total Views
794
Views on SlideShare
588
Embed Views
206

Actions

Likes
0
Downloads
2
Comments
0

3 Embeds 206

http://www.aboutme.by 204
http://www.linkedin.com 1
http://www.slideee.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-ShareAlike LicenseCC Attribution-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Date & Time in Java SE 8 Date & Time in Java SE 8 Presentation Transcript

  • Date & Time Java 8 ilya.lapitan@gmail.com
  • Java 8: Date & Time Java SE 8 представила новые и современные средства для работы со значениями даты и времени. Их можно найти в пакете: java.time. Классы данного пакета реализуют спецификацию JSR 310: Date and Time API, и основаны на стандарте ISO 8601. Проект разрабатывался под руководством автора Joda Time Stephen Colebourne и компании Oracle.
  • Java 8: Date & Time Date & Time API используют: -Unicode Common Locale Data Repository (CLDR) самая большая в мире коллекция данных для различных локалей -Time Zone Database (TZDB) коллекция данных о мировых часовых поясах и изменениях в них, начиная с 1970-ого года
  • Java 8: Date & Time Date & Time API принципы: -Clear - методы хорошо определены, а их поведение понятно и ожидаемо -Fluent - свободный и легкий интерфейс, облегчающий понимание кода. Вызов методов может быть соединен в единую цепочку.
  • Java 8: Date & Time Date & Time API принципы: -Immutable - большинство создаваемых объектов не изменяемые. При изменении значения объекта, создается новый объект с новым значением. Это обеспечивает Date & Time API потокобезопасность по определению. -Extensible - большие возможности для расширения и реализации функционала под конкретную задачу. Написания пользовательских библиотек.
  • Java 8: Date & Time Cостав java.time: java.time - API для работы с датой и временем. Все классы immutable и thread-safe. Основное API. java.time.chrono - API для работы с календарями отличными от стандарта ISO 8601. java.time.format - API для парсинга и форматирования значений даты и времени java.time.temporal - API для доступа к единицам измерения даты и времени java.time.zone - API для поддержки временных зон
  • Java 8: Date & Time Время human time Удобное для восприятия человеком год, месяц, день, час, минута, секунда machine time Удобное для восприятия машиной миллисекунды, наносекунды
  • Java 8: Date & Time java.time.DayOfWeek - множество, представляющее 7 дней недели. Нумерация дней согласно ISO-8601: 1 - Monday … … 7 - Sunday
  • Java 8: Date & Time java.time.DayOfWeek - множество, представляющее 7 дней недели. DayOfWeek dow = DayOfWeek.MONDAY; => MONDAY dow.getDisplayName(TextStyle.FULL, Locale.ENGLISH) => Monday dow.getDisplayName(TextStyle.NARROW, Locale.ENGLISH) => M dow.getDisplayName(TextStyle.SHORT, Locale.ENGLISH) => Mon
  • Java 8: Date & Time java.time.Month - множество, представляющее 12 месяцев года. Нумерация дней согласно ISO-8601: 1 - January … … 12 - December
  • Java 8: Date & Time java.time.Month - множество, представляющее 12 месяцев года. Month month = Month.MARCH; => MARCH month.getDisplayName(TextStyle.FULL, Locale.ENGLISH); => March month.getDisplayName(TextStyle.NARROW, Locale.ENGLISH); => M month.getDisplayName(TextStyle.SHORT, Locale.ENGLISH)); => Mar
  • Java 8: Date & Time java.time.LocalDate - значение даты без учета временной зоны. Данный класс не содержит какой-либо информации о времени или временной зоне. LocalDate.now(); => 2014-02-23
  • Java 8: Date & Time Внимание! Класс java.time.LocalDate - value-based класс. Класс java.time.LocalDate использует календарную систему ISO-8601, что может вызвать проблемы в приложениях работающих с историческими датами.
  • Java 8: Date & Time java.time.YearMonth - значение года и месяца. Данный класс не содержит какой-либо информации о дате, времени или временной зоне. YearMonth.now(); => 2014-02
  • Java 8: Date & Time Внимание! Класс java.time.YearMonth - value-based класс.
  • Java 8: Date & Time java.time.MonthDay - значение месяца и дня. Данный класс не содержит какой-либо информации о годе, времени или временной зоне. MonthDay.now(); => --02-23
  • Java 8: Date & Time Внимание! Класс java.time.MonthDay - value-based класс. Класс java.time.MonthDay использует календарную систему ISO-8601, что может вызвать проблемы в приложениях работающих с историческими датами.
  • Java 8: Date & Time java.time.Year - хранит информацию об определенном годе. Данный класс не содержит какой-либо информации о времени или временной зоне. Year.now(); => 2014
  • Java 8: Date & Time Внимание! Класс java.time.Year - value-based класс. Класс java.time.Year использует календарную систему ISO-8601, что может вызвать проблемы в приложениях работающих с историческими датами.
  • Java 8: Date & Time java.time.LocalTime - хранит информацию о времени. Данный класс не содержит какой-либо информации о дате или временной зоне. Представляется с точностью до наносекунд. LocalTime.now(); => 01:53:42.656
  • Java 8: Date & Time Внимание! Класс java.time.LocalTime - value-based класс.
  • Java 8: Date & Time java.time.LocalDateTime - хранит информацию о дате и времени. Данный класс не содержит какой-либо информации о временной зоне. Представляется с точностью до наносекунд. LocalDateTime.now(); => 2014-02-25T01:57:52.250
  • Java 8: Date & Time Внимание! Класс java.time.LocalDateTime - value-based класс. Класс java.time.LocalDateTime использует календарную систему ISO-8601, что может вызвать проблемы в приложениях работающих с историческими датами.
  • Java 8: Date & Time TimeZone - регион использующий одинаковый стандарт времени. ZoneId - идентификатор часового пояса, предоставляющий правила преобразования между Instant и LocalDateTime. ZoneOffset - определяет смещение часового пояса относительно Greenwich/UTC
  • Java 8: Date & Time java.time.ZonedDateTime - хранит информации о дате и времени, с указанием временной зоны. Представляется с точностью до наносекунд. ZonedDateTime.now(); => 2014-02-25T02:09:53.321+03:00[Europe/Minsk]
  • Java 8: Date & Time Внимание! Класс java.time.ZonedDateTime - value-based класс.
  • Java 8: Date & Time java.time.OffsetDateTime - хранит информацию о дате и времени, с указанием смещения относительно Greenwich/UTC. Представляется с точностью до наносекунд. OffsetDateTime.now(); => 2014-02-25T02:13:34.737+03:00
  • Java 8: Date & Time Внимание! Класс java.time.OffsetDateTime - value-based класс.
  • Java 8: Date & Time java.time.OffsetTime - хранит информаци о времени, с указанием смещения относительно Greenwich/UTC. Представляется с точностью до наносекунд. OffsetTime.now(); => 02:15:50.779+03:00
  • Java 8: Date & Time Внимание! Класс java.time.OffseTime - value-based класс.
  • Java 8: Date & Time java.time.Instant - временная метка. Представляется с точностью до наносекунд. Instant.now(); => 2014-02-24T23:18:45.866Z
  • Java 8: Date & Time Внимание! Класс java.time.Instant - value-based класс. UTC использует концепцию високосных секунд. Java Time API использует собственную шкалу Java TimeScale, которая для значений времени начиная с 197211-03 идентична UTC-SLS.
  • Java 8: Date & Time java.time.Duration - служит для представления промежутка времени выраженного в единицах времени. Instant instant1 = Instant.now(); Instant instant2 = instant1.plusSeconds(10); Duration.between(instant2,instant1).getSeconds() => -10 Duration.between(instant2,instant1).abs().getSeconds() => 10
  • Java 8: Date & Time Внимание! Класс java.time.Duration - value-based класс.
  • Java 8: Date & Time java.time.Period - служит для представления промежутка времени выраженного в единицах даты. LocalDate today = LocalDate.now(); LocalDate birthday = LocalDate.of(1986, Month.JUNE, 05); Period.between(birthday,today).getYears() => 27
  • Java 8: Date & Time Внимание! Класс java.time.Period - value-based класс.
  • Java 8: Date & Time Value-based классы: - equals, hashCode, и toString опираются на конкретное состояние объекта, а на класс, который он представляет - не сравнивайте объекты данного рода при помощи сравнения их ссылок (==) - используйте для сравнения объектов данного рода только метод equals()
  • Java 8: Date & Time Value-based классы: - конструкторы отсутствуют, есть только фабричные методы - свободно заменяемые (любые два X и Y равные согласно equals(), при любых вычислениях и вызовах методов не должны производить никаких видимых изменение в поведении)
  • Java 8: Date & Time java.time.Clock - абстрактный класс для доступа к временной метке, времени и дате с учетом часового пояса.
  • Java 8: Date & Time java.time.Clock - Best practice: public class MyBean { private Clock clock; // dependency inject ... public void process(LocalDate eventDate) { if (eventDate.isBefore(LocalDate.now(clock)) { ... } } }
  • Java 8: Date & Time java.time.Clock - Текущие методы могут использоваться для тестирования: Clock.offset(Clock, Duration) Clock.systemUTC() Clock.fixed(Instant, ZoneId)
  • Java 8: Date & Time java.time.chrono - API для работы с календарями отличными от стандарта ISO 8601: JapaneseDate.now() => Japanese Heisei 26-02-26 HijrahDate.now() => Hijrah-umalqura AH 1435-04-26 MinguoDate.now() => Minguo ROC 103-02-26 ThaiBuddhistDate.now() => ThaiBuddhist BE 2557-02-26
  • Java 8: Date & Time java.time.format.DateTimeFormatter - используется для форматирования и парсинга значений даты и времени. Для этого используются методы format() и parse() соответственно. java.time.format.DateTimeFormatter позволяет использовать предопределенные форматы даты и времени, либо определять собственные.
  • Java 8: Date & Time Основные классы java.time определяют собственные методы для форматирования и парсинга значений даты и времени.
  • Java 8: Date & Time Парсинг: LocalDate.parse("20140225",DateTimeFormatter.BASIC_ISO_DATE) 20140225 => 2014-02-25 Форматирование: ZonedDateTime.now().format(DateTimeFormatter.RFC_1123_DATE_TIME) 2014-02-25T03:00:09.559+03:00[Europe/Minsk] => Tue, 25 Feb 2014 03:00:09 +0300
  • Java 8: Date & Time Стандартизованные префиксы имен методов: of with from plus parse minus format to get at is
  • Java 8: Date & Time Стандартизованные префиксы имен методов: of - создаем экземпляр объекта указанного класса,по набору параметров. Входные данные проверяются, но не конвертируются. LocalDate localDate = LocalDate.of(1986, Month.JUNE, 5); localDate => 1986-06-05
  • Java 8: Date & Time Стандартизованные префиксы имен методов: from - создаем экземпляр объекта указанного класса, из другого объекта. Может наблюдаться потеря некоторых исходных данных (их усечение). LocalDateTime localDateTime = LocalDateTime.now(Clock.systemUTC()); localDateTime => 2014-02-15T23:48:52.701 LocalDate localDate = LocalDate.from(localDateTime); localDate => 2014-02-15
  • Java 8: Date & Time Стандартизованные префиксы имен методов: parse - создаем экземпляр объекта указанного класса из входной строки LocalDate.parse("2014-12-23") => 2014-12-23
  • Java 8: Date & Time Стандартизованные префиксы имен методов: format - форматируем строку согласно указанному формату LocalDate localDate = LocalDate.now(); localDate => 2014-02-16 localDate.format(DateTimeFormatter.BASIC_ISO_DATE)) => 20140216
  • Java 8: Date & Time Стандартизованные префиксы имен методов: get - берем элемент состояния объекта LocalDate.now().getYear() => 2014
  • Java 8: Date & Time Стандартизованные префиксы имен методов: is - спрашиваем состояние объекта LocalDate.now().isLeapYear() => false
  • Java 8: Date & Time Стандартизованные префиксы имен методов: with - возвращаем копию объекта с одним измененным элементом состояния LocalDate localDate = LocalDate.now(); localDate => 2014-02-16 localDate.withYear(2016) => 2016-02-16
  • Java 8: Date & Time Стандартизованные префиксы имен методов: plus - возвращаем копию объекта с увеличенным элементом состояния LocalDate localDate = LocalDate.now(); localDate => 2014-02-16 localDate.plusDays(14) => 2014-03-02 одним
  • Java 8: Date & Time Стандартизованные префиксы имен методов: minus - возвращаем копию объекта с уменьшенным элементом состояния LocalDate localDate = LocalDate.now(); localDate => 2014-02-16 localDate.minusYears(15) => 1999-02-16 одним
  • Java 8: Date & Time Cтандартизованные префиксы имен методов: to - конвертируем текущий объект в объект другого типа LocalDateTime localDateTime = LocalDateTime.now(Clock.systemUTC()); localDateTime => 2014-02-16T00:51:35.731 localDateTime.toLocalDate() => 2014-02-16
  • Java 8: Date & Time Стандартизованные префиксы имен методов: at - комбинируем текущий объект с другим объектом LocalDate localDate = LocalDate.now(); localDate => 2014-02-16 LocalTime localTime = LocalTime.now(); localTime => 03:55:32.360 localDate.atTime(localTime) => 2014-02-16T03:55:32.360
  • Java 8: Date & Time Совместимость со старым кодом: Calendar.toInstant(): Calendar -> Instant GregorianCalendar.toZonedDateTime(): GregorianCalendar -> ZonedDateTime GregorianCalendar.from(ZonedDateTime): ZonedDateTime -> GregorianCalendar (с использованием дефолтной локали)
  • Java 8: Date & Time Совместимость со старым кодом: Date.from(Instant): Instant -> Date Date.toInstant(): Date -> Instant TimeZone.toZoneId(): TimeZone -> ZoneId
  • Java 8: Date & Time Работа с базой данных: ANSI SQL Java SE 8 DATE LocalDate TIME LocalTime TIMESTAMP LocalDateTime TIME WITH TIMEZONE OffsetTime TIMESTAMP WITH TIMEZONE OffsetDateTime
  • Java 8: Date & Time Дополнительная информация: Стандарт ISO 8601 http://en.wikipedia.org/wiki/ISO_8601 JSR 310: Date and Time API https://jcp.org/en/jsr/detail?id=310 Tutorial: http://docs.oracle.com/javase/tutorial/datetime/index.html
  • Java 8: Date & Time Дополнительная информация: Unicode Common Locale Data Repository http://cldr.unicode.org/ Time Zone Database http://www.iana.org/time-zones UTC SLS http://www.cl.cam.ac.uk/~mgk25/time/utc-sls/