Kurzusok
/
Elm
Elm
/
Feladatok
/
Kuroko órája
Kuroko órája

Kuroko órája

Tanulófeladat

Bevezetés

Idő

A Time modul arra szolgál, hogy ember által olvasható dátumokat és időpontokat jelenítsünk meg vele. Bár a Time modullal technikailag lehetséges időpontokat manipulálni, vannak olyan Elm közösségi csomagok, amelyek sokkal jobban illenek erre a feladatra, például a justinmimbs/date vagy a CoderDennis/elm-time-format.

Posix

Az időpontokat a Posix átlátszatlan típus reprezentálja, amely a Unix epoch időt csomagolja be: az 1970. január 1-jei UTC éjfél óta eltelt ezredmásodpercek számát. A Posix egyértelmű érték, amely nem változik az időzónák között, ezért jó választás az idő nyilvántartására. Egy Elm-alkalmazásban a Posix időpontokat jellemzően külső források adják, például a böngésző.

Egy Posix-t át lehet alakítani ezredmásodpercek számává, és fordítva, a következő függvényekkel:

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

Időzónák

A mindennapi életünkben mi, emberek általában nem Posix értékeket olvasunk, hanem a helyi időt részesítjük előnyben, amely a Földön elfoglalt helyünktől és a helyi nyári időszámítás szabályaitól függ. Elmben ezt az információt a Zone átlátszatlan típus kódolja, amelyet általában a böngésző biztosít.

Van egy különleges Zone, amely mindig elérhető:

utc : Zone

Emberi időpontok

Egy Posix és egy Zone birtokában elegendő információnk van ahhoz, hogy a helyi időt bármilyen részletességgel megjelenítsük. Íme az ehhez használható függvények listája:

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

Két további Time egyedi típust is észrevehettél:

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

Ezeket az egyedi típusokat a felhasználóknak kell ember által olvasható értékekké alakítaniuk.

Utasítások

A japán barátod, Kuroko olyan streamer, aki nemzetközi közönséget vonz. Kuroko streamelési menetrendje meglehetősen bonyolult: úgy tűnik, minden adás más időpontban kezdődik minden nap.

Segítséget kér tőled egy kis alkalmazás elkészítésében, amely a nézői helyi időzónájában jeleníti meg a menetrendjét: ez a Kuroko's Clock. Van még egy követelménye: az alkalmazásnak két különböző nyelven is meg kell tudnia jeleníteni az időt: japánul és amerikai angolul.

1. Ez egy dátum

Definiálj egy showLocalDate : Locale -> Int -> Month -> Int -> String függvényt, amely megjelenít egy (érvényes) helyi dátumot.

A US területi beállításban a formátum Month/Day/Year, vezető nullák nélkül.

A JP területi beállításban a formátum Year年Month月Day日, szintén vezető nullák nélkül.

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

2. Műsoridő

Definiálj egy showLocalTime : Locale -> Int -> Int -> String függvényt, amely megjelenít egy (érvényes) helyi időpontot.

A US területi beállításban az órák 12 órás formátumban jelennek meg „PM” vagy „AM” jelöléssel, a percek pedig vezető nullákkal.

A JP területi beállításban az óra 24 órás formátumban, a „時” jel előtt jelenik meg, a percek pedig vezető nullák nélkül, a „分” jel előtt.

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

3. Kerülj a zónába

Definiálj egy showDateTime : Locale -> Zone -> Posix -> String függvényt, amely egy adott területi beállításban, egy időzónához viszonyítva jelenít meg egy dátumot és időpontot.

A végeredmény megjelenítéséhez használd a showLocalDate és a showLocalTime függvényt.

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分"
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Elm Exercism

Készen állsz elkezdeni a(z) Kuroko órája feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Elm nyelvet 28 fogalom110 feladat segítségével, valódi emberi mentorálással, mindez ingyen.