rusia japon israel india hora espaƱa dubai china australia elixir

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.



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.



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}} .