Треки
/
Java
Java
/
Вправи
/
Запис на красу
Запис на красу

Запис на красу

Навчальна вправа

Вступ

Дата і час

Пакет java.time, представлений у Java 8, містить кілька класів для роботи з датами і часом.

LocalDate

Клас java.time.LocalDate представляє дату без часового поясу в календарній системі ISO-8601, наприклад 2007-12-03:

LocalDate date = LocalDate.of(2007, 12, 3);

Дати можна порівнювати з іншими датами:

LocalDate date1 = LocalDate.of(2007, 12, 3);
LocalDate date2 = LocalDate.of(2007, 12, 4);

date1.isBefore(date2);
// => true

date1.isAfter(date2);
// => false

Екземпляр LocalDate має гетери, які дають змогу отримати з нього окремі частини дати:

LocalDate date = LocalDate.of(2007, 12, 3);

date.getDayOfMonth();
// => 3

Екземпляр LocalDate має методи для додавання до нього одиниць часу:

Note

Ці методи повертають новий екземпляр LocalDate і не змінюють наявний екземпляр, оскільки клас LocalDate незмінний.

LocalDate date = LocalDate.of(2007, 12, 3);

date.plusDays(3);
// => 2007-12-06

LocalDateTime

Клас java.time.LocalDateTime представляє дату й час без часового поясу в календарній системі ISO-8601, наприклад 2007-12-03T10:15:30:

LocalDateTime datetime = LocalDateTime.of(2007, 12, 3, 10, 15, 30);

Екземпляр LocalDate можна перетворити на LocalDateTime:

LocalDate date = LocalDate.of(2007, 12, 3);
LocalDateTime datetime = date.atTime(10, 15, 30);
datetime.toString();
// => "2007-12-03T10:15:30"

Форматування дати і часу

І LocalDate, і LocalDateTime використовують стандартний запис ISO-8601, коли перетворюють дату в String і з String.

LocalDateTime datetime = LocalDateTime.of(2007, 12, 3, 10, 15, 30);
LocalDateTime parsed = LocalDateTime.parse("2007-12-03T10:15:30");

datetime.isEqual(parsed);
// => true

Розібрати LocalDate чи LocalDateTime з такого String в іншому форматі не вдасться. Натомість, щоб форматувати дати за власним форматом, варто скористатися класом java.time.format.DateTimeFormatter:

DateTimeFormatter parser = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDate date = LocalDate.parse("03/12/2007", parser);

DateTimeFormatter printer = DateTimeFormatter.ofPattern("MMMM d, yyyy");
printer.format(date);
// => "December 3, 2007"

Під час створення власного формату можна також указати локаль, щоб форматувати й розбирати дати для різних регіонів:

DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.FRENCH).format(date);
// => décembre 3, 2007

DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.of("pt")).format(date);
// => dezembro 3, 2007

Вказівки

У цій вправі ми будемо працювати над планувальником прийомів для салону краси в Нью-Йорку, який відкрився 15 вересня 2012 року.

1. Розібрати дату прийому

Реалізуйте метод AppointmentScheduler.schedule(), щоб розібрати текстове представлення дати прийому у відповідний LocalDateTime:

AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.schedule("7/25/2019 13:45:00");
// => LocalDateTime.of(2019, 7, 25, 13, 45, 0)

2. Перевірити, чи прийом уже минув

Реалізуйте метод AppointmentScheduler.hasPassed(), який приймає дату прийому й перевіряє, чи прийом відбувся колись у минулому:

AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.hasPassed(LocalDateTime.of(1999, 12, 31, 9, 0, 0));
// => true

3. Перевірити, чи прийом після обіду

Реалізуйте метод AppointmentScheduler.isAfternoonAppointment(), який приймає дату прийому й перевіряє, чи прийом після обіду (>= 12:00 and < 18:00):

AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.isAfternoonAppointment(LocalDateTime.of(2019, 03, 29, 15, 0, 0))
// => true

4. Описати час і дату прийому

Реалізуйте метод AppointmentScheduler.getDescription(), який приймає дату прийому й повертає опис цієї дати й часу:

AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.getDescription(LocalDateTime.of(2019, 03, 29, 15, 0, 0))
// => "You have an appointment on Friday, March 29, 2019, at 3:00 PM."

5. Повернути дату річниці

Реалізуйте метод AppointmentScheduler.getAnniversaryDate(), який повертає дату річниці цього року, тобто 15 вересня:

AppointmentScheduler scheduler = new AppointmentScheduler();
scheduler.getAnniversaryDate()
// => LocalDate.of(<current year>, 9, 15)
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Java Exercism

Час розпочати Запис на красу?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Java, а також 26 концепцій158 вправ та справжнє наставництво від людей, і все це безкоштовно.