Cómo obtener la marca de tiempo UTC en Ruby?


¿Cómo obtener la marca de tiempo UTC en Ruby?

Author: Druzion, 2010-05-31

8 answers

time = Time.now.getutc

Rationale: En mis ojos una marca de tiempo es exactamente eso: Un punto en el tiempo. Esto se puede representar con precisión con un objeto. Si necesita algo más, un valor escalar, por ejemplo, segundos desde la época de Unix, intervalos de 100-ns desde 1601 o tal vez una cadena para fines de visualización o almacenar la marca de tiempo en una base de datos, puede obtenerlo fácilmente del objeto. Pero eso depende mucho de su uso previsto.

Diciendo que " una marca de tiempo verdadera es el número de segundos Unix epoch " está un poco perdiendo el punto, ya que es una forma de representar un punto en el tiempo, pero también necesita información adicional para saber que se trata de un tiempo y no de un número. Un objeto Timeresuelve este problema muy bien al representar un punto en el tiempo y también ser explícito sobre lo que es.

 100
Author: Joey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-06 08:50:07

Podrías usar: Time.now.to_i.

 220
Author: manzhikov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-11 13:47:51

El formato predeterminado no es muy útil, en mi opinión. Prefiero ISO8601 ya que es clasificable, relativamente compacto y ampliamente reconocido:

>> require 'time'
=> true
>> Time.now.utc.iso8601
=> "2011-07-28T23:14:04Z"
 40
Author: Tim Sylvester,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-28 23:15:02

Normalmente la marca de tiempo no tiene zona horaria.

% irb
> Time.now.to_i == Time.now.getutc.to_i
=> true
 12
Author: Yuki Matsukura,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-21 06:43:43

¿De qué sirve una marca de tiempo con su granularidad dada en segundos? Me resulta mucho más práctico trabajar con Tiempo.ahora.to_f. Heck, usted puede incluso lanzar un to_s.sub('.',") para deshacerse del punto decimal, o realizar una conversión de tipo como este: Integer(1e6*Tiempo.ahora.to_f).

 5
Author: chava,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-16 14:11:50

Time.utc(2010, 05, 17)

 2
Author: August Lilleaas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-31 11:19:30

time = Time.zone.now()

Funcionará como

irb> Time.zone.now
=> 2017-12-02 12:06:41 UTC
 -1
Author: Asterisk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-02 15:27:45

La forma correcta es hacer un Time.now.getutc.to_i para obtener la cantidad de marca de tiempo adecuada, ya que simplemente mostrar el entero no siempre es lo mismo que la marca de tiempo utc debido a las diferencias de zona horaria.

 -4
Author: Sumit Bisht,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-11 10:11:28