Треки
/
C#
C#
/
Вправи
/
Салон краси підкорює світ
Салон краси підкорює світ

Салон краси підкорює світ

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

Вступ

Час

Поняття часу в .NET опрацьовується за допомогою структури DateTime. Існують процедури для перетворення між місцевим часом і UTC. Арифметичні дії можна виконувати за допомогою TimeSpan.

Часовий пояс

Клас TimeZoneInfo надає процедури для роботи з різницею між часовими поясами. Клас TimeZoneInfo також містить методи, які спрощують роботу з переходом на літній час.

Клас CultureInfo підтримує формати дати й часу, залежні від локалі.

Щоб підтримувати написання кросплатформного коду, клас RuntimeInformation дає змогу визначити, в якій операційній системі виконується код: Linux, Windows чи OSX.

Вказівки

У цій вправі ми знову повертаємося у світ салонів (уперше він зʼявився у вправі datetimes). Як і з низкою наших проєктів, ще один наш клієнт досяг великого успіху й відкрив філії в Лондоні та Парижі на додачу до своєї бази в Нью-Йорку.

1. Надайте адміністраторам місцевий час, що відповідає записам у UTC (усесвітній координований час)

Реалізуйте статичний метод Appointment.ShowLocalTime(), який приймає час у UTC і повертає його як місцевий час

// For a student in NY
Appointment.ShowLocalTime(new DateTime(2030, 7, 25, 13, 45, 0));
// => {2030, 7, 25, 8, 45, 0}

2. Плануйте записи в Нью-Йорку, Лондоні та Парижі

Кожен салон сам відповідає за приймання власних записів. Введений час є місцевим для розташування салону. Наприклад, якщо для запису в нью-йоркському салоні ввести час 13:45, то очікують, що клієнт прийде одразу після обіду. Так само, якщо ввести час 13:45 для лондонського салону, теж очікують, що клієнт прийде одразу після обіду.

Нам стане в пригоді знання ідентифікаторів часових поясів для Нью-Йорка, Лондона і Парижа.

На Mac (OSX) і Linux вони такі:

  • Нью-Йорк - America/New_York
  • Лондон - Europe/London
  • Париж - Europe/Paris

У Windows вони такі:

  • Нью-Йорк - Eastern Standard Time
  • Лондон - GMT Standard Time
  • Париж - W. Europe Standard Time

Реалізуйте статичне перевантаження Appointment.Schedule(), яке приймає локацію та рядок тексту (англ. string) з часом і повертає час запису в UTC.

Реалізація Schedule() повинна дозволяти запускати зібраний код на Linux, Windows і Mac. Це перша вправа, у якій нам потрібно зважати на операційну систему. Потрібно буде мати окремі шляхи виконання коду, щоб урахувати різницю в ідентифікаторах часових поясів, описану вище.

Гарантовано, що вхідні рядки тексту з датою й часом коректні.

Appointment.Schedule("7/25/2030 13:45:00", Location.Paris);
// => {2030, 7, 25, 11, 45, 0}

3. Надсилайте клієнтам нагадування за кілька проміжків до запису

Реалізуйте статичний метод Appointment.GetAlertTime(), щоб надсилати нагадування за 1 день (завчасно), 1 годину 45 хвилин (стандартно) і 30 хвилин (пізно) до запису.

Appointment.GetAlertTime(new DateTime(2030, 7, 25, 14, 45, 0), AlertLevel.Early);
// => {2030, 7, 24, 14, 45, 0}

4. Якщо перехід на літній час стався нещодавно, ми надсилаємо клієнтам нагадування.

Реалізуйте статичний метод Appointment.HasDaylightSavingChanged(), який повертає true, якщо літній час став активним або неактивним за останні 7 днів.

Appointment.HasDaylightSavingChanged(new DateTime(2020, 3, 30, 14, 45, 0), Location.London);
// => true

5. Використовуйте місцевий формат дати й часу, щоб вводити записи

Щоб записи можна було робити у форматі, звичному для місцевого персоналу, нам доручили створити експериментальну процедуру, яка дозволяє вводити дати й час у типовому форматі для розташування салону.

Реалізуйте метод Appointment.NormalizeDateTime(), який приймає коректно оформлений рядок тексту з датою й часом у форматі, що відповідає локації, і перетворює його на обʼєкт DateTime. Спроби перетворити дату й час на UTC не робляться.

Якщо введено неправильний формат, потрібно повернути DateTime зі значенням 1/1/1.

Appointment.NormalizeDateTime("25/11/2019 13:45:00", Location.London);
// => {2019, 11, 25, 13, 45, 0}
Appointment.NormalizeDateTime("25/11/2019 13:45:00", Location.NewYork);
// => {1, 1, 1, 0, 0, 0}
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
C# Exercism

Час розпочати Салон краси підкорює світ?

Зареєструйтеся на Exercism, щоб вивчати й опановувати C#, а також 62 концепції178 вправ та справжнє наставництво від людей, і все це безкоштовно.