Ruby/Rails: la conversion d'une Date en timestamp UNIX
Comment aurais-je obtenir un timestamp UNIX (nombre de secondes depuis 1970 GMT) à partir d'un objet Date, dans une application Rails?
Je sais Time#to_i
retourne un timestamp, mais Date#to_time
et l'obtention de l'horodatage des résultats dans quelque chose qui est d'environ un mois (je ne sais pas pourquoi...).
Toute aide est appréciée, merci!
Edit: OK, je crois que j'ai tout compris - j'ai été le traitement d'un jour à plusieurs reprises dans une boucle, et à chaque fois que la date a été déplacée un peu à cause du fuseau horaire décalage, menant finalement à mon timestamp être un mois de congé. Encore, je serais intéressé de savoir si il y a moyen de faire cela sans compter sur Date#to_time
.
Vous devez vous connecter pour publier un commentaire.
Le code
date.to_time.to_i
devrait fonctionner correctement. Les Rails de session de la console ci-dessous montre un exemple:Noter que les intermédiaires objet DateTime est à l'heure locale, l'horodatage peut-être un plusieurs heures hors de ce que vous attendez. Si vous souhaitez travailler dans l'heure UTC, vous pouvez utiliser la date de la méthode "to_utc".
to_utc
date.to_time.utc
est probablement ce qu'il voulait dire.- Je obtenir le suivant quand je l'ai essayer:
La différence entre ces deux nombres est dû au fait que
Date
ne stocke pas les heures, les minutes ou les secondes de l'heure actuelle. La conversion d'unDate
à unTime
verra le jour, à minuit.Solution pour Ruby 1.8 lorsque vous avez l'arbitraire d'un objet DateTime:
Les options suggérées de l'aide
to_utc
ouutc
pour corriger le décalage de l'heure locale ne fonctionne pas. Pour moi j'ai trouvé à l'aide deTime.utc()
travaillé correctement et que le code comporte moins d'étapes:vs
Voici ce qui se produit lorsque vous appelez utc après l'utilisation de
Date
.......donc clairement d'appel
to_i
va donner une mauvaise timestamp.