Successfully reported this slideshow.
Your SlideShare is downloading. ×

Урок 16. Дата и время в языке Java 8

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 42 Ad

Урок 16. Дата и время в языке Java 8

Download to read offline

Урок 16. Дата и время в Java 8.
Классы LocalDate, LocalTime, LocalDateTime, Instant, Period, Duration, DateTimeFormatter.
Лекции, задания, видео, тесты и вопросы на:
https://www.examclouds.com/ru/java/java-core-russian/new-date-time-api
Подписывайтесь на страницу:
https://www.facebook.com/Examclouds
Подписывайтесь на канал
https://www.youtube.com/c/tatyanamilkina

Урок 16. Дата и время в Java 8.
Классы LocalDate, LocalTime, LocalDateTime, Instant, Period, Duration, DateTimeFormatter.
Лекции, задания, видео, тесты и вопросы на:
https://www.examclouds.com/ru/java/java-core-russian/new-date-time-api
Подписывайтесь на страницу:
https://www.facebook.com/Examclouds
Подписывайтесь на канал
https://www.youtube.com/c/tatyanamilkina

Advertisement
Advertisement

More Related Content

Slideshows for you (17)

Similar to Урок 16. Дата и время в языке Java 8 (20)

Advertisement
Advertisement

Урок 16. Дата и время в языке Java 8

  1. 1. Урок 16 Дата и время Java 8 1. Класс LocalDate. 2. Класс LocalTime. 3. Класс LocalDateTime. 4. Класс Instant. 5. Класс Period. 6. Класс Duration. 7. Класс DateTimeFormatter. www.examclouds.com
  2. 2. Старый Java API для работы с датами • java.util.Date и java.util.Calendar входят в старый Java API для работы с датами. • Недостатки: ❖не потокобезопасный, ❖изменяемые объекты, ❖временная зона даты – это временная зона JVM по умолчанию, ❖месяца начинаются с нуля. www.examclouds.com
  3. 3. Новый Date Time API • Новый Java 8 Date/Time API содержит неизменные (immutable), потокобезопасные классы с продуманным дизайном. • Содержатся они в пакете java.time. www.examclouds.com
  4. 4. Классы нового Date/Time API • LocalDate – представляет время с годом, месяцем и днем месяца. Например 2015-08-25. • LocalTime - представляет время с часами, минутами, секундами и наносекундами. Например 13:21.05.123456789. • LocalDateTime – комбинация содержимого LocalDate и LocalTime. Например 2015-08-25 13:21.05.12345. www.examclouds.com
  5. 5. Классы нового Date/Time API • Instant – представляет точку времени в секундах и наносекундах. Например 923,456,789 секунд и 186,054,812 наносекунд. • Period - представляет количество времени в годах, месяцах и днях. Например 5 лет, 2 месяца и 9 дней. • Duration - представляет количество времени в секундах и наносекундах. Например 12.87656 секунд. www.examclouds.com
  6. 6. Классы нового Date/Time API • LocalDate, LocalTime, LocalDateTime и Instant реализуют интерфейс java.time.temporal.Temporal. • Period и Duration реализуют интерфейс java.time.temporal.TemporalAmount. www.examclouds.com
  7. 7. LocalDate • Для создания объекта класса используется метод of(): • LocalDate newYear2001 = LocalDate.of(2001, 1, 1); LocalDate newYear2002 = LocalDate.of(2002, Month.JANUARY, 1); • Для создания объекта, отображающего текущую дату, используется метод now(): • LocalDate today = LocalDate.now(); • (LocalDateDemo1.java) www.examclouds.com
  8. 8. LocalDate • Получить год, месяц, день месяца: • int year = today.getYear(); int month = today.getMonthValue(); Month monthAsEnum = today.getMonth(); int dayYear = today.getDayOfYear(); int dayMonth = today.getDayOfMonth(); DayOfWeek dayWeekEnum = today.getDayOfWeek(); • (LocalDateDemo2.java) www.examclouds.com
  9. 9. Задание • Создайте объект класса LocalDate, указывая дату своего рождения. • Вывести на консоль день недели, день в году, месяц, год. www.examclouds.com
  10. 10. LocalDate • Получить год, месяц, день месяца: • int year = today.get(ChronoField.YEAR); int month = today.get(ChronoField.MONTH_OF_YEAR); int dayYear = today.get(ChronoField.DAY_OF_YEAR); int dayMonth = today.get(ChronoField.DAY_OF_MONTH); int dayWeek = today.get(ChronoField.DAY_OF_WEEK); • (LocalDateDemo3.java) www.examclouds.com
  11. 11. Сравнение дат • boolean after = newYear2001.isAfter(newYear2002); boolean before = newYear2001.isBefore(newYear2002); boolean equal = newYear2001.equals(newYear2002); boolean leapYear = newYear2001.isLeapYear(); • CompareLocalDateDemo1.java www.examclouds.com
  12. 12. Задание • Создайте объект класса LocalDate, представляющий текущее время. • Сравните его со своим днем рождения используя методы isAfter(), isBefore(). www.examclouds.com
  13. 13. Метод with() public class WithLocalDateDemo { public static void main(String[] args) { LocalDate newYear2001 = LocalDate.of(2001, 1, 1); LocalDate newYear2003 = newYear2001.with(ChronoField.YEAR, 2003 LocalDate newYear2004 = newYear2001.withYear(2004); LocalDate december2001 = newYear2001.withMonth(12); LocalDate february2001 = newYear2001.withDayOfYear(32); LocalDate xmas2001 = newYear2001.withMonth(12).withDayOfMonth(2 System.out.println("newYear2003 " + newYear2003); System.out.println("newYear2004 " + newYear2004); System.out.println("december2001 " + december2001); System.out.println("february2001 " + february2001); System.out.println("xmas2001 " + xmas2001); } } www.examclouds.com
  14. 14. Методы plus(), minus() public class PlusMinusLocalDateDemo { public static void main(String[] args) { LocalDate newYear2001 = LocalDate.of(2001, 1, 1); LocalDate newYear2005 = newYear2001.plusYears(4); LocalDate march2001 = newYear2001.plusMonths(2); LocalDate january15Year2001 = newYear2001.plusDays(14); LocalDate lastWeekJanuary2001 = newYear2001.plusWeeks(3); LocalDate newYear2006 = newYear2001.plus(5, ChronoUnit.YEARS); LocalDate newYear2000 = newYear2001.minusYears(1); LocalDate nov2000 = newYear2001.minusMonths(2); LocalDate dec30Year2000 = newYear2001.minusDays(2); LocalDate lastWeekDec2001 = newYear2001.minusWeeks(1); LocalDate newYear1999 = newYear2001.minus(2, ChronoUnit.YEARS); System.out.println("newYear2005: " + newYear2005); System.out.println("march2001: " + march2001); System.out.println("january15Year2001: " + january15Year2001); System.out.println("lastWeekJanuary2001: " + lastWeekJanuary2001); System.out.println("newYear2006: " + newYear2006); System.out.println("newYear2000: " + newYear2000); System.out.println("nov2000: " + nov2000); System.out.println("dec30Year2000: " + dec30Year2000); System.out.println("lastWeekDec2001: " + lastWeekDec2001); System.out.println("newYear1999: " + newYear1999); } } www.examclouds.com
  15. 15. Класс LocalTime public class LocalTimeDemo1 { public static void main(String[] args) { // С часами (0-23) и минутами(0-59) LocalTime fiveThirty = LocalTime.of(5, 30); // С часами, минутами и секундами(0-59) LocalTime noon = LocalTime.of(12, 0, 0); // С часами, минутами, секундами и наносекундами LocalTime almostMidnight = LocalTime.of(23, 59, 59, 999999); System.out.println(fiveThirty); System.out.println(noon); System.out.println(almostMidnight); } } www.examclouds.com
  16. 16. Класс LocalTime public class LocalTimeDemo2 { public static void main(String[] args) { LocalTime now = LocalTime.now(); int hour = now.getHour(); int minute = now.getMinute(); int second = now.getSecond(); int nanosecond = now.getNano(); System.out.println("Часы: " + hour); System.out.println("Минуты: " + minute); System.out.println("Секунды: " + second); System.out.println("Наносекунды: " + nanosecond); } } www.examclouds.com
  17. 17. Класс LocalTime public class LocalTimeDemo3 { public static void main(String[] args) { LocalTime now = LocalTime.now(); int hourAMPM = now.get(ChronoField.HOUR_OF_AMPM); // 0 - 11 int hourDay = now.get(ChronoField.HOUR_OF_DAY); // 0 - 23 int minuteDay = now.get(ChronoField.MINUTE_OF_DAY); // 0 - 1,439 int minuteHour = now.get(ChronoField.MINUTE_OF_HOUR); // 0 - 59 int secondDay = now.get(ChronoField.SECOND_OF_DAY); // 0 - 86,399 int secondMinute = now.get(ChronoField.SECOND_OF_MINUTE);// 0 - 59 long nanoDay = now.getLong(ChronoField.NANO_OF_DAY);//0-86399999999 int nanoSecond = now.get(ChronoField.NANO_OF_SECOND);//0-999999999 System.out.println("Часы: " + hourAMPM); System.out.println("Часы: " + hourDay); System.out.println("Минуты дня: " + minuteDay); System.out.println("Минуты: " + minuteHour); System.out.println("Секунды дня: " + secondDay); System.out.println("Секунды: " + secondMinute); System.out.println("Наносекунды дня: " + nanoDay); System.out.println("Наносекунды: " + nanoSecond); } } www.examclouds.com
  18. 18. Класс LocalTime – методы сравнения public class CompareLocalTimeDemo { public static void main(String[] args) { LocalTime fiveThirty = LocalTime.of(5, 30); LocalTime noon = LocalTime.of(12, 0, 0); LocalTime almostMidnight = LocalTime.of(23, 59, 59, 999999 System.out.println("fiveThirty.isAfter(noon)? " + fiveThirty.isAfter(noon)); // false System.out.println("fiveThirty.isBefore(noon)? " + fiveThirty.isBefore(noon)); // true System.out.println("noon.equals(almostMidnight)? “ + noon.equals(almostMidnight)); // false } } www.examclouds.com
  19. 19. LocalTime – методы with() public class WithLocalTimeDemo { public static void main(String[] args) { LocalTime noon = LocalTime.of(12, 0, 0); LocalTime ten = noon.with(ChronoField.HOUR_OF_DAY, 10); LocalTime eight = noon.withHour(8); LocalTime twelveThirty = noon.withMinute(30); LocalTime thirtyTwoSeconds = noon.withSecond(32); // Можно использовать сцепление методов LocalTime secondsNano = noon.withSecond(20).withNano(999999); System.out.println("ten: " + ten); System.out.println("eight: " + eight); System.out.println("twelveThirty: " + twelveThirty); System.out.println("thirtyTwoSeconds: " + thirtyTwoSeconds); System.out.println("secondsNano: " + secondsNano); } } www.examclouds.com
  20. 20. Класс LocalTime – методы plus(), minus() public class PlusMinusLocalTimeDemo { public static void main(String[] args) { LocalTime fiveThirty = LocalTime.of(5, 30); // Добавление LocalTime sixThirty = fiveThirty.plusHours(1); LocalTime fiveForty = fiveThirty.plusMinutes(10); LocalTime plusSeconds = fiveThirty.plusSeconds(14); LocalTime plusNanos = fiveThirty.plusNanos(99999999); LocalTime sevenThirty = fiveThirty.plus(2, ChronoUnit.HOURS); // Вычитание LocalTime fourThirty = fiveThirty.minusHours(1); LocalTime fiveTen = fiveThirty.minusMinutes(20); LocalTime minusSeconds = fiveThirty.minusSeconds(2); LocalTime minusNanos = fiveThirty.minusNanos(1); LocalTime fiveTwenty = fiveThirty.minus(10, ChronoUnit.MINUTES); System.out.println("sixThirty: " + sixThirty); System.out.println("fiveForty: " + fiveForty); System.out.println("plusSeconds: " + plusSeconds); System.out.println("plusNanos: " + plusNanos); System.out.println("sevenThirty: " + sevenThirty); System.out.println("fourThirty: " + fourThirty); System.out.println("fiveTen: " + fiveTen); System.out.println("minusSeconds: " + minusSeconds); System.out.println("minusNanos: " + minusNanos); System.out.println("fiveTwenty: " + fiveTwenty); } www.examclouds.com
  21. 21. Класс LocalDateTime public class LocalDateTimeDemo1 { public static void main(String[] args) { // Секунды и наносекунды равны нулю LocalDateTime date1 = LocalDateTime.of(2014, 9, 19, 14, 5); // Наносекунды равны нулю LocalDateTime date2 = LocalDateTime.of(2014, 9, 19, 14, 5, 20); LocalDateTime date3 = LocalDateTime.of(2014, 9, 19, 14, 5, 20, 9); LocalDate date = LocalDate.now(); LocalDateTime date4 = date.atTime(14, 30, 59, 999999); LocalTime time = LocalTime.now(); LocalDateTime date5 = time.atDate(date); System.out.println(date1); System.out.println(date2); System.out.println(date3); System.out.println(date4); System.out.println(date5); } } www.examclouds.com
  22. 22. Класс LocalDateTime public class LocalDateTimeDemo2 { public static void main(String[] args) { LocalDateTime now = LocalDateTime.now(); int year = now.getYear(); int dayYear = now.getDayOfYear(); int hour = now.getHour(); int minute = now.getMinute(); System.out.println("Год: " + year); System.out.println("День в году: " + dayYear); System.out.println("Часы: " + hour); System.out.println("Минуты: " + minute); } } www.examclouds.com
  23. 23. Методы with(), plus(), minus(),isAfter(), isBefore() класса LocalDateTime public class LocalDateTimeDemo3 { public static void main(String[] args) { LocalDateTime now = LocalDateTime.now(); LocalDateTime date1 = now.with(ChronoField.HOUR_OF_DAY, 10); LocalDateTime date2 = now.withMonth(8); LocalDateTime date3 = now.withYear(2013).withMinute(0); // Сравнение boolean after = now.isAfter(date1); boolean before = now.isBefore(date1); boolean equal = now.equals(date1); // Добавление LocalDateTime date4 = now.plusYears(4); LocalDateTime date5 = now.plusWeeks(3); LocalDateTime date6 = date1.plus(2, ChronoUnit.HOURS); // Вычитание LocalDateTime date7 = now.minusMonths(2); LocalDateTime date8 = now.minusNanos(1); LocalDateTime date9 = now.minus(10, ChronoUnit.SECONDS); } www.examclouds.com
  24. 24. Класс Instant Класс используется для представления мгновения в секундах, которые прошли с 1 января 1970 года. www.examclouds.com
  25. 25. Методы now(), ofEpochSecond(), ofEpochMilli() класса Instant public class InstantDemo1 { public static void main(String[] args) { Instant now = Instant.now(); Instant instant = now.with(ChronoField.NANO_OF_SECOND, 10); // Устанавливаем секунды Instant fiveSecondsAfterEpoch = Instant.ofEpochSecond(5); // Устанавливаем секунды и наносекунды (могут быть отрицательные) Instant sixSecTwoNanBeforeEpoch = Instant.ofEpochSecond(-6, -2); // Устанавливаем милисекунды после (могут быть и до) эпохи Instant fiftyMilliSecondsAfterEpoch = Instant.ofEpochMilli(50); System.out.println("now: " + now); System.out.println("instant: " + instant); System.out.println("fiveSecondsAfterEpoch: " + fiveSecondsAfterEpoch); System.out.println("sixSecTwoNanBeforeEpoch: " + sixSecTwoNanBeforeEpoch); System.out.println("fiftyMilliSecondsAfterEpoch: " + fiftyMilliSecondsAfter } } www.examclouds.com
  26. 26. Методы get() класса Instant public class InstantDemo2 { public static void main(String[] args) { Instant now = Instant.now(); long seconds = now.getEpochSecond(); // Получить секунды int nanos1 = now.getNano(); //Получить наносекунды // Получить значение как int int millis = now.get(ChronoField.MILLI_OF_SECOND); // Получить значение как long long nanos2 = now.getLong(ChronoField.NANO_OF_SECOND); System.out.println("Секунды: " + seconds); System.out.println("Наносекунды: " + nanos1); System.out.println("Милисекунды: " + millis); System.out.println("Наносекунды: " + nanos2); } } www.examclouds.com
  27. 27. Класс Instant - сравнение public class InstantDemo3 { public static void main(String[] args) { Instant now = Instant.now(); Instant fiveSecondsAfterEpoch = Instant.ofEpochSecond(5); System.out.println("now.isAfter(fiveSecondsAfterEpoch)? " + now.isAfter(fiveSecondsAfterEpoch)); System.out.println("now.isBefore(fiveSecondsAfterEpoch)? " + now.isBefore(fiveSecondsAfterEpoch)); System.out.println("now.equals(fiveSecondsAfterEpoch)? « + now.equals(fiveSecondsAfterEpoch)); } } www.examclouds.com
  28. 28. Методы plus(), minus() класса Instant public class InstantDemo4 { public static void main(String[] args) { Instant now = Instant.ofEpochSecond(0); // Добавление Instant instant1 = now.plusSeconds(400); Instant instant2 = now.plusMillis(98622200); Instant instant3 = now.plusNanos(300013890); Instant instant4 = now.plus(2, ChronoUnit.MINUTES); // Вычитание Instant instant5 = now.minusSeconds(2); Instant instant6 = now.minusMillis(1); Instant instant7 = now.minusNanos(1); Instant instant8 = now.minus(10, ChronoUnit.SECONDS); System.out.println(now); System.out.println(instant1); System.out.println(instant2); System.out.println(instant3); System.out.println(instant4); System.out.println(instant5); System.out.println(instant6); System.out.println(instant7); System.out.println(instant8); } } www.examclouds.com
  29. 29. Класс Period Класс представляет количество времени в годах, месяцах и днях. www.examclouds.com
  30. 30. Создание объектов класса Period public class PeriodDemo1 { public static void main(String[] args) { Period period5y4m3d = Period.of(5, 4, 3); Period period2d = Period.ofDays(2); Period period2m = Period.ofMonths(2); Period period14d = Period.ofWeeks(2); Period period2y = Period.ofYears(2); System.out.println(period5y4m3d); System.out.println(period2d); System.out.println(period2m); System.out.println(period14d); System.out.println(period2y); } } www.examclouds.com
  31. 31. Класс Period Период можно рассматривать как разницу между двумя LocalDate: public class PeriodDemo2 { public static void main(String[] args) { LocalDate march2003 = LocalDate.of(2003, 3, 1); LocalDate may2003 = LocalDate.of(2003, 5, 1); Period dif = Period.between(march2003, may2003); System.out.println(dif); } } www.examclouds.com
  32. 32. Метод between() класса Period public class PeriodDemo3 { public static void main(String[] args) { LocalDate localDate1 = LocalDate.of(2000, 2, 10); LocalDate localDate2 = LocalDate.of(2001, 4, 12); Period difference1 = Period.between(localDate1, localDate2); System.out.println(difference1); } } www.examclouds.com
  33. 33. Методы get() класса Period public class PeriodDemo4 { public static void main(String[] args) { Period period5y4m3d = Period.of(5, 4, 3); int days = period5y4m3d.getDays(); int months = period5y4m3d.getMonths(); int year = period5y4m3d.getYears(); long days2 = period5y4m3d.get(ChronoUnit.DAYS); System.out.println("Дни: " + days); System.out.println("Месяца: " + months); System.out.println("Годы: " + year); System.out.println("Дни: " + days2); } } www.examclouds.com
  34. 34. Методы with() класса Period public class PeriodDemo5 { public static void main(String[] args) { Period period2d = Period.ofDays(2); Period period8d = period2d.withDays(8); Period period2y1m2d = period2d.withYears(2).withMonths(1); System.out.println(period2d); System.out.println(period8d); System.out.println(period2y1m2d); } } www.examclouds.com
  35. 35. Методы plus(), minus() класса Period public class PeriodDemo6 { public static void main(String[] args) { Period period5y4m3d = Period.of(5, 4, 3); Period period2y = Period.ofYears(2); // Добавление System.out.println(period5y4m3d.plusYears(4)); System.out.println(period5y4m3d.plusMonths(3)); System.out.println(period5y4m3d.plusDays(3)); System.out.println(period5y4m3d.plus(period2y)); // Вычитание System.out.println(period5y4m3d.minusYears(2)); System.out.println(period5y4m3d.minusMonths(1)); System.out.println(period5y4m3d.minusDays(1)); System.out.println(period5y4m3d.minus(period2y)); } } www.examclouds.com
  36. 36. Класс Duration • Класс Duration служит для хранения продолжительности времени на основе секунд и наносекунд. • Также для отображения длительности можно использовать и другие величины, вроде минут, часов, дней. Однако, основное предназначение этого класса - представление небольших промежутков времени. • Для работы с длительными промежутками времени предназначен другой класс - Period. www.examclouds.com
  37. 37. Класс Duration public class DurationDemo1 { public static void main(String[] args) { Duration oneDay = Duration.ofDays(1); Duration oneHour = Duration.ofHours(1); Duration oneMin = Duration.ofMinutes(1); Duration tenSeconds = Duration.ofSeconds(10); Duration twoSeconds = Duration.ofSeconds(1, 1_000_000_000); Duration oneSecondFromMillis = Duration.ofMillis(1); Duration oneSecondFromNanos = Duration.ofNanos(1000000000); Duration oneSecond = Duration.of(1, ChronoUnit.SECONDS); System.out.println("oneDay: " + oneDay); System.out.println("oneHour: " + oneHour); System.out.println("oneMin: " + oneMin); System.out.println("tenSeconds: " + tenSeconds); System.out.println("twoSeconds: " + twoSeconds); System.out.println("oneSecondFromMillis: "+oneSecondFromMillis); System.out.println("oneSecondFromNanos: "+oneSecondFromNanos); System.out.println("oneSecond: "+oneSecond); } www.examclouds.com
  38. 38. Разбор и форматирование даты в Java 8 • Для разбора даты и времени из строковых значений существует два статических метода parse: • parse(CharSequence text) - конвертация строки, которая содержит дату и время, в объект LocalDateTime. При этом используется формат строки вида 2007-12-03T10:15:30. • parse(CharSequence text, DateTimeFormatter formatter) - конвертация строки, которая содержит дату и время, в объект LocalDateTime с использованием указанного формата. www.examclouds.com
  39. 39. Разбор даты в Java 8 public class FormatLocalDateTimeDemo1 { public static void main(String[] args) { DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("MMMM d, yyyy HH LocalDateTime localDateTime = LocalDateTime.parse("июня 5, 2018 12:10:56", System.out.println(localDateTime); DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("MMMM d, yyyy"); LocalDate localDate = LocalDate.parse("июня 5, 2018", formatter2); System.out.println(localDate); } } www.examclouds.com
  40. 40. Разбор и форматирование даты в Java 8 public class FormatLocalDateTimeDemo2 { public static void main(String[] args) { LocalDateTime dateTime = LocalDateTime.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM, dd, yyyy HH:mm:ss", Locale.US); System.out.println(dateTime.format(formatter)); } } www.examclouds.com
  41. 41. Форматирование даты в Java 8 Символ Что означает Пример y год в эре 2014; 14 M/L месяц (название или номер) 9; 09; Sep; September; d день месяца 17 E день недели Вт; вторник h время в 12-часовом формате 6 H часы в 24-часовом формате 18 m минуты 32 s секунды 11 S миллисекунды 109 www.examclouds.com
  42. 42. • Лекции, задания, видео, тесты и вопросы на: • https://www.examclouds.com/ru/java/java-core- russian/new-date-time-api • Подписывайтесь на страницу: • https://www.facebook.com/Examclouds • Подписывайтесь на канал • https://www.youtube.com/c/tatyanamilkina www.examclouds.com

×