elixir - israel - hora en japon
Obtener la fecha y hora actual en Elixir (10)
Esta parece una pregunta realmente tonta, pero ¿cómo se obtiene y muestra la fecha u hora actual en Elixir? Traté de revisar los documentos pero no pude encontrar nada. ¿Necesito usar una función Erlang?
NaiveDateTime
Si no te importa la zona horaria y solo quieres una fecha y hora puras, usa
NaiveDateTime
:
NaiveDateTime.utc_now
# => ~N[2017-11-30 20:49:54.660724]
Fecha y hora
Si también desea detalles de la zona horaria, use
DateTime
, que también devolverá cosas como el nombre de la zona horaria, el desplazamiento UTC, el desplazamiento STD y la abreviatura de la zona horaria:
DateTime.utc_now
# => %DateTime{calendar: Calendar.ISO, day: 30, hour: 20, microsecond: {667345, 6}, minute: 51, month: 11, second: 58, std_offset: 0, time_zone: "Etc/UTC", utc_offset: 0, year: 2017, zone_abbr: "UTC"}
También puede llamar a
to_date/1
y
to_time/1
desde estos módulos para obtener los valores específicos de fecha y hora de las estructuras datetime.
Creo que su mejor opción es utilizar la biblioteca timex de Paul Schoenfelder (también conocido como BitWalker) para Elixir. La biblioteca está aquí: https://github.com/bitwalker/timex y puede obtener el paquete de hex.pm https://hex.pm/packages/timex . Paul amablemente proporcionó una buena explicación de cómo usar la biblioteca en la página Léame de ese repositorio de Github.
Podrías hacer llamadas a las bibliotecas nativas de Erlang, pero creo que la biblioteca de Paul es superior cuando se trata de Elixir.
De Erlang 19.1:
:os.system_time(:millisecond)
De Erlang 18:
:os.system_time(:milli_seconds)
Proporciona la marca de tiempo UNIX actual UTC.
Gracias @HenrikN por vincular la publicación del blog http://michal.muskala.eu/2015/07/30/unix-timestamps-in-elixir.html
Depende de en qué formato lo desee.
Puede usar cualquier función en la biblioteca estándar de Erlang de Elixir.
Tradicionalmente, obtendría el tiempo con la función
now/0
:
iex(1)> :erlang.now
{1487, 549978, 29683}
Eso representa
time_t
1,487,549,978.29683, que son 19 minutos, 38.29683 segundos después de la medianoche UTC del lunes 20 de febrero de 2017.
Sin embargo, desde Erlang / OTP 18, esa función está en desuso; Una de las razones es que Erlang garantiza que el valor de retorno aumentará cada llamada. Si lo llama en un ciclo cerrado en una máquina lo suficientemente rápido como para llamarlo más de una vez por microsegundo, la marca de tiempo devuelta se adelantará en tiempo real.
El reemplazo es
una API con más precisión y control
.
La interfaz principal para esta nueva API es la función
os:system_time/0
, que devuelve el tiempo de época en una unidad definida por el sistema:
iex(2)> :os.system_time
1487550102372148000
Sin embargo, puede solicitar una unidad específica con
system_time/1
:
iex(3)> :os.system_time(:millisecond)
1487549663928
Desde Elixir 1.2, esas funciones también han estado disponibles en el
módulo del
System
nativo:
iex(4)> System.system_time(:second)
1487549711
Para una interfaz más amigable pero aún nativa de Elixir, use el módulo de
calendar
, que le dará tuplas:
iex(5)> :calendar.universal_time
{{2017, 2, 20}, {0, 26, 47}}
Desde 1.3, Elixir también ha tenido su propio conjunto de módulos para manipular fechas y horas:
Date
y
DateTime
.
Puede usar sus funciones para obtener la fecha u hora actual de la siguiente manera:
iex(6)> Date.utc_today
~D[2017-02-20]
iex(7)> DateTime.utc_now
#DateTime<2017-02-20 00:27:51.776208Z>
Para obtener el número de milisegundos (marca de tiempo Unix):
DateTime.utc_now() |> DateTime.to_unix(:millisecond)
Para obtener la marca de tiempo de Unix
DateTime.to_unix(DateTime.utc_now)
Para responder su pregunta más específicamente (¡aunque realmente aprecio la recomendación de Onorio de usar Timex!), Puede obtener la fecha y hora actuales de la biblioteca estándar de Erlang usando
:calendar.universal_time()
o
:calendar.local_time()
.
Hay una serie de funciones útiles para trabajar con el tipo de
datetime
y
datetime
de Erlang en el módulo de
calendar
, pero son algo limitadas y no le proporcionan nada para analizar o formatear fechas, que es donde entra Timex.
Puede usar
DateTime.utc_now/0
para obtener UTC DateTime.
Si necesita lidiar con el horario de verano o las zonas horarias, hice una biblioteca para eso: Calendar .
Para obtener la hora actual, usaría, por ejemplo,
Calendar.DateTime.now("America/Los_Angeles")
para la hora actual en Los Ángeles o
Calendar.DateTime.now_utc
para la hora actual en UTC.
También puede usar
:os.timestamp/0
, que devuelve
{megaseconds, seconds, microseconds}
de UTC.
:os.timestamp |> :calendar.now_to_datetime
le dará ahora en formato erlang estándar
{{YYYY, MM, DD}, {HH, MM, SS}}
.