Esta parece una pregunta realmente tonta, pero ¿cómo se obtiene y muestra la fecha u hora actual en Elixir? Intenté revisar los documentos pero no pude encontrar nada. ¿Necesito usar una función Erlang?
83
Esta parece una pregunta realmente tonta, pero ¿cómo se obtiene y muestra la fecha u hora actual en Elixir? Intenté revisar los documentos pero no pude encontrar nada. ¿Necesito usar una función Erlang?
Para responder a su pregunta de manera más específica (¡aunque realmente aprecio la recomendación de Onorio de usar Timex!), Puede obtener la fecha y hora actual de la lib estándar de Erlang usando :calendar.universal_time()
o :calendar.local_time()
. Hay una serie de funciones útiles para trabajar con el datetime
tipo de Erlang en el calendar
módulo, 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.fuente
Desde Erlang 19.1:
Desde Erlang 18:
Da la marca de tiempo UTC actual de UNIX.
Gracias @HenrikN por vincular la publicación del blog http://michal.muskala.eu/2015/07/30/unix-timestamps-in-elixir.html
fuente
NaiveDateTime
Si no le importa la zona horaria y solo desea una fecha y hora puras, use
NaiveDateTime
:NaiveDateTime.utc_now # => ~N[2017-11-30 20:49:54.660724]
Fecha y hora
Si también desea los detalles de la zona horaria, utilice
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"}
Luego, también puede llamar
to_date/1
yto_time/1
desde estos módulos para obtener los valores de fecha y hora específicos de las estructuras de fecha y hora.fuente
Creo que tu mejor opción es usar la biblioteca timex de Paul Schoenfelder (también conocida como BitWalker) para Elixir. La biblioteca está aquí: https://github.com/bitwalker/timex y puede obtener el paquete en hex.pm https://hex.pm/packages/timex . Paul brindó amablemente una buena explicación de cómo usar la biblioteca en la página Léame de ese repositorio de github.
Podría hacer llamadas a las bibliotecas nativas de Erlang, pero creo que la biblioteca de Paul es superior cuando se trata de Elixir.
fuente
Depende del formato en el que lo desee.
Puede usar cualquier función en la biblioteca estándar de Erlang de Elixir. Tradicionalmente, obtendría el tiempo con la
now/0
función: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á obsoleta; una de las razones es que Erlang garantiza que el valor de retorno aumentará con cada llamada. Si lo llama en un bucle 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á al tiempo real.
El reemplazo es una API con más precisión y control . La interfaz principal de esta nueva API es la
os:system_time/0
función, que devuelve el tiempo de época en una unidad definida por el sistema:Sin
system_time/1
embargo, puede solicitar una unidad específica con :Desde Elixir 1.2, esas funciones también han estado disponibles en el
System
módulo nativo :Para una interfaz más amigable pero aún nativa de Elixir, use el
calendar
módulo, que le dará tuplas:Desde la 1.3, Elixir también ha tenido su propio conjunto de módulos para manipular fechas y horas:
Date
yDateTime
. Puede usar sus funciones para obtener la fecha u hora actual así:fuente
Para obtener la cantidad de milisegundos (marca de tiempo de Unix):
fuente
También puede usar
:os.timestamp\0
, que regresa{megaseconds, seconds, microseconds}
de UTC.:os.timestamp |> :calendar.now_to_datetime
le dará ahora en{{YYYY, MM, DD}, {HH, MM, SS}}
formato estándar erlang .fuente
Si necesita lidiar con el horario de verano o las zonas horarias, hice una biblioteca para eso: Calendario .
Para obtener la hora actual, usaría, por ejemplo,
Calendar.DateTime.now("America/Los_Angeles")
la hora actual en Los Ángeles oCalendar.DateTime.now_utc
la hora actual en UTC.fuente
Para obtener la marca de tiempo de Unix
fuente
Bueno, Timex al rescate generalmente, sin embargo, algunos de los siguientes trucos pueden ser de ayuda:
fuente