Question

Comment puis-je obtenir un horodatage UNIX (nombre de secondes depuis 1970 GMT) d'un objet Date dans une application Rails?

Je sais que Time # to_i renvoie un horodatage, mais l'exécution de Date # to_time , puis l'obtention des résultats de l'horodatage donnent lieu à un délai d'un mois environ (vous ne savez pas pourquoi. ..).

Toute aide est appréciée, merci!

Edit: OK, je pense avoir trouvé la solution. Je traitais une date plusieurs fois en boucle, et chaque fois que la date était légèrement décalée en raison d'un décalage de fuseau horaire, mon horodatage a finalement pris fin dans un mois. . Néanmoins, je serais intéressé de savoir s’il est possible de le faire sans s’appuyer sur Date # to_time .

Était-ce utile?

La solution

Le code date.au_heure.à_i devrait fonctionner correctement. La session de la console Rails ci-dessous montre un exemple:

>> Date.new(2009,11,26).to_time
=> Thu Nov 26 00:00:00 -0800 2009
>> Date.new(2009,11,26).to_time.to_i
=> 1259222400
>> Time.at(1259222400)
=> Thu Nov 26 00:00:00 -0800 2009

Notez que l’objet DateTime intermédiaire est à l’heure locale. L’horodatage peut donc différer de plusieurs heures. Si vous souhaitez travailler à l’heure UTC, vous pouvez utiliser la méthode "to_utc" de DateTime.

Autres conseils

Je reçois ce qui suit quand je l'essaie:

>> Date.today.to_time.to_i
=> 1259244000
>> Time.now.to_i
=> 1259275709

La différence entre ces deux chiffres est due au fait que Date ne stocke pas les heures, les minutes ou les secondes de l'heure actuelle. La conversion d'une Date en un Heure donnera lieu à ce jour, minuit.

Solution pour Ruby 1.8 lorsque vous avez un objet DateTime arbitraire:

1.8.7-p374 :001 > require 'date'
 => true 
1.8.7-p374 :002 > DateTime.new(2012, 1, 15).strftime('%s')
 => "1326585600"

Les options suggérées d'utilisation de to_utc ou de utc pour corriger le décalage de l'heure locale ne fonctionnent pas. Pour moi, l'utilisation de Time.utc () a fonctionné correctement et le code comporte moins d'étapes:

> Time.utc(2016, 12, 25).to_i
=> 1482624000 # correct

vs

> Date.new(2016, 12, 25).to_time.utc.to_i
=> 1482584400 # incorrect

Voici ce qui se passe lorsque vous appelez utc après avoir utilisé Date ....

> Date.new(2016, 12, 25).to_time
=> 2016-12-25 00:00:00 +1100 # This will use your system's time offset
> Date.new(2016, 12, 25).to_time.utc
=> 2016-12-24 13:00:00 UTC

... si clairement appeler to_i va donner un horodatage incorrect.

DateTime.new(2012, 1, 15).to_time.to_i
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top