Rutas
/
Elm
Elm
/
Ejercicios
/
El reloj de Kuroko
El reloj de Kuroko

El reloj de Kuroko

Ejercicio de aprendizaje

Introducción

Tiempo

El módulo Time se usa para mostrar fechas y horas legibles para las personas. Aunque técnicamente es posible manipular tiempos con Time, hay paquetes de la comunidad de Elm mucho más adecuados para esa tarea, como justinmimbs/date o CoderDennis/elm-time-format.

Posix

Los tiempos se representan con el tipo opaco Posix, que envuelve el tiempo de la época Unix, el número de milisegundos transcurridos desde el 1 de enero de 1970 a medianoche UTC. Un Posix es un valor no ambiguo que no varía entre zonas horarias, por lo que es una buena opción para guardar el tiempo. En una aplicación de Elm, lo habitual es que las fuentes externas, como el navegador, proporcionen los tiempos Posix.

Es posible transformar un Posix en un número de milisegundos y viceversa con las siguientes funciones:

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

Zonas horarias

En nuestro día a día, los humanos normalmente no leemos Posix y preferimos la hora local, que depende de nuestra ubicación en la Tierra y de las reglas locales de horario de verano. En Elm, esta información está codificada en el tipo opaco Zone, que normalmente proporciona el navegador.

Hay una Zone especial a la que siempre se puede acceder:

utc : Zone

Tiempos legibles

Con un Posix y una Zone, tenemos suficiente información para mostrar la hora local con cualquier nivel de detalle. Esta es una lista de las funciones que se pueden usar para ello:

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

Habrás visto otros dos tipos personalizados de Time:

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

Convertir estos tipos personalizados en valores legibles para las personas queda en manos de quien los use.

Instrucciones

Tu amigo japonés Kuroko es un streamer con tirón internacional. El calendario de directos de Kuroko es bastante enrevesado: cada directo parece empezar a una hora distinta cada día.

Te pide ayuda para crear una pequeña aplicación que muestre su horario en la zona horaria local de sus espectadores: el reloj de Kuroko. Tiene un requisito adicional: la aplicación debe poder mostrar la hora en dos idiomas distintos, japonés e inglés estadounidense.

1. Es una cita

Define una función showLocalDate : Locale -> Int -> Month -> Int -> String que muestre una fecha local (válida).

Con la configuración regional US, el formato será Month/Day/Year, sin ceros a la izquierda.

Con la configuración regional JP, el formato será Year年Month月Day日, también sin ceros a la izquierda.

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

2. Es la hora del espectáculo

Define una función showLocalTime : Locale -> Int -> Int -> String que muestre una hora local (válida).

Con la configuración regional US, las horas se mostrarán en formato de 12 horas, junto con «PM» o «AM», y los minutos se mostrarán con ceros a la izquierda.

Con la configuración regional JP, la hora se mostrará en formato de 24 horas antes de «時» y los minutos se mostrarán sin ceros a la izquierda antes de «分».

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

3. Entra en la zona

Define una función showDateTime : Locale -> Zone -> Posix -> String que muestre una fecha y una hora relativas a una zona horaria y en una configuración regional concreta.

Usa showLocalDate y showLocalTime para mostrar el resultado final.

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分"
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Elm Exercism

¿Listo para empezar El reloj de Kuroko?

Regístrate en Exercism para aprender y dominar Elm con 28 conceptos110 ejercicios y mentoría humana real, todo gratis.