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.
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
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
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.
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.
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日"
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分"
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分"
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.