Треки
/
Elm
Elm
/
Вправи
/
Годинник Куроко
Годинник Куроко

Годинник Куроко

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

Вступ

Час

Модуль Time використовують, щоб показувати дати й час у зрозумілому для людини вигляді. Хоча технічно працювати з часом можна й засобами Time, у спільноті Elm є пакети, які підходять для цього значно краще, як-от justinmimbs/date або CoderDennis/elm-time-format.

Posix

Час подається непрозорим типом Posix, який обгортає час Unix-епохи, тобто кількість мілісекунд, що минули з півночі 1 січня 1970 року за UTC. Posix - це однозначне значення, яке не змінюється від часового поясу, тому добре підходить для зберігання часу. У застосунку Elm значення Posix зазвичай надходять із зовнішніх джерел, як-от браузер.

Перетворити Posix на число мілісекунд і навпаки можна за допомогою таких функцій:

posixToMillis : Posix -> Int
millisToPosix : Int -> Posix

Часові пояси

У повсякденному житті ми зазвичай не читаємо Posix, а надаємо перевагу місцевому часу, який залежить від нашого розташування на Землі та від місцевих правил переходу на літній час. В Elm ця інформація закодована в непрозорому типі Zone, який зазвичай надає браузер.

Є один особливий Zone, доступний завжди:

utc : Zone

Час для людей

Маючи Posix і Zone, ми маємо достатньо інформації, щоб показати місцевий час із будь-яким рівнем деталізації. Ось список функцій, які для цього можна використати:

toYear : Zone -> Posix -> Int
toMonth : Zone -> Posix -> Month
toDay : Zone -> Posix -> Int
toWeekday : Zone -> Posix -> Weekday
toHour : Zone -> Posix -> Int
toMinute : Zone -> Posix -> Int
toSecond : Zone -> Posix -> Int
toMillis : Zone -> Posix -> Int

Ми, напевно, вже помітили ще два власні типи з Time:

type Month = Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec
type Weekday = Mon | Tue | Wed | Thu | Fri | Sat | Sun

Перетворення цих власних типів на зрозумілі для людини значення залишається за користувачами.

Вказівки

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

Він просить допомогти створити невеликий застосунок, який буде показувати його розклад у місцевих часових поясах глядачів: Годинник Куроко. У нього є додаткова вимога: застосунок має вміти показувати час двома різними мовами: японською та англійською (США).

1. Це дата

Визначте функцію showLocalDate : Locale -> Int -> Month -> Int -> String, яка відображатиме (дійсну) місцеву дату.

У локалі US формат буде Month/Day/Year без провідних нулів.

У локалі JP формат буде Year年Month月Day日, також без провідних нулів.

showLocalDate US 2025 May 1
    -- "5/1/2025"
showLocalDate JP 2025 May 1
    -- "2025年5月1日"

2. Час показу

Визначте функцію showLocalTime : Locale -> Int -> Int -> String, яка відображатиме (дійсний) місцевий час.

У локалі US години буде показано у 12-годинному форматі разом із «PM» або «AM», а хвилини буде показано з провідними нулями.

У локалі JP годину буде показано у 24-годинному форматі перед «時», а хвилини буде показано без провідних нулів перед «分».

showLocalTime US 13 8
    -- "1:08 PM"
showLocalTime JP 13 8
    -- "13時8分"

3. Увійдіть у зону

Визначте функцію showDateTime : Locale -> Zone -> Posix -> String, яка відображатиме дату й час відносно часового поясу в певній локалі.

Використайте showLocalDate та showLocalTime, щоб відобразити остаточний результат.

showDateTime US Time.utc (Time.millisToPosix 0)
    -- "1/1/1970 12:00 AM"
showDateTime JP Time.utc (Time.millisToPosix 0)
    -- "1970年1月1日0時0分"
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Elm Exercism

Час розпочати Годинник Куроко?

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