Il modulo Time serve a visualizzare date e orari in un formato leggibile dalle persone.
Anche se tecnicamente è possibile manipolare date e orari con Time, esistono pacchetti della comunità Elm molto più adatti a questo compito, come justinmimbs/date o CoderDennis/elm-time-format.
Gli orari sono rappresentati dal tipo opaco Posix, che racchiude il tempo epoch Unix, cioè il numero di millisecondi trascorsi dalla mezzanotte del 1º gennaio 1970 UTC.
Un Posix è un valore non ambiguo che non varia tra i fusi orari, quindi è una buona scelta per tenere traccia del tempo.
In un'applicazione Elm, gli orari Posix sono di solito forniti da fonti esterne, come il browser.
È possibile trasformare un Posix in un numero di millisecondi e viceversa con le seguenti funzioni:
posixToMillis : Posix -> Int
millisToPosix : Int -> Posix
Nella vita di tutti i giorni, noi esseri umani di solito non leggiamo Posix e preferiamo l'ora locale, che dipende da dove ci troviamo sulla Terra e dalle regole locali dell'ora legale.
In Elm, queste informazioni sono codificate nel tipo opaco Zone, di solito fornito dal browser.
C'è un Zone speciale sempre accessibile:
utc : Zone
Con un Posix e un Zone, abbiamo informazioni sufficienti per mostrare l'ora locale a qualsiasi livello di dettaglio.
Ecco una lista delle funzioni che si possono usare per farlo:
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
Avrai notato altri due tipi personalizzati di Time:
type Month = Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec
type Weekday = Mon | Tue | Wed | Thu | Fri | Sat | Sun
Spetta agli utenti convertire questi tipi personalizzati in valori leggibili dalle persone.
Il tuo amico giapponese Kuroko è uno streamer con un seguito internazionale. Il programma delle sue dirette è piuttosto complicato: ogni diretta sembra iniziare a un orario diverso ogni giorno.
Ti chiede aiuto per costruire una piccola applicazione che mostri il suo programma nel fuso orario locale dei suoi spettatori: Kuroko's Clock. Ha anche un requisito aggiuntivo: l'app deve poter mostrare l'ora in due lingue diverse, il giapponese e l'inglese americano.
Definisci una funzione showLocalDate : Locale -> Int -> Month -> Int -> String che mostrerà una data locale (valida).
Nel locale US, il formato sarà Month/Day/Year, senza zeri iniziali.
Nel locale JP, il formato sarà Year年Month月Day日, anche in questo caso senza zeri iniziali.
showLocalDate US 2025 May 1
-- "5/1/2025"
showLocalDate JP 2025 May 1
-- "2025年5月1日"
Definisci una funzione showLocalTime : Locale -> Int -> Int -> String che mostrerà un'ora locale (valida).
Nel locale US, le ore saranno mostrate nel formato a 12 ore insieme a "PM" o "AM". I minuti saranno mostrati con gli zeri iniziali.
Nel locale JP, l'ora sarà mostrata nel formato a 24 ore prima di "時". I minuti saranno mostrati senza zeri iniziali prima di "分".
showLocalTime US 13 8
-- "1:08 PM"
showLocalTime JP 13 8
-- "13時8分"
Definisci una funzione showDateTime : Locale -> Zone -> Posix -> String che mostrerà una data e un'ora relative a un fuso orario in un locale specifico.
Usa showLocalDate e showLocalTime per mostrare il risultato finale.
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分"
Iscriviti a Exercism per imparare e padroneggiare Elm con 28 concetti110 esercizi e il mentoring di persone reali, tutto gratis.