Comment faire pour obtenir l'heure actuelle que de 13 chiffres entier en Ruby?
J'ai cette jQuery
fonction qui retourne l'heure courante comme le nombre de millisecondes écoulées depuis l'époque (Janvier 1, 1970):
time = new Date().getTime();
Est-il un moyen de faire la même chose en Ruby?
Maintenant, je suis à l'aide de Ruby Time.now.to_i
qui fonctionne très bien, mais renvoie une à 10 chiffres integer (nombre de secondes)
Comment puis-je obtenir pour afficher le nombre de millisecondes, comme dans jQuery
?
Ce n'est pas une "fonction jQuery", c'est tout simplement le ECMAScript (javascript). C'est peut-être ce qui a incité l'-1, peu sévère.
Voir aussi stackoverflow.com/q/20001883/238886
Voir aussi stackoverflow.com/q/20001883/238886
OriginalL'auteur Tintin81 | 2012-10-30
Vous devez vous connecter pour publier un commentaire.
strftime
méthode prévue parActiveSupport::TimeWithZone
ne comprend pas le%s
et%Q
les prescripteurs. Vous aurez besoin de les convertir à une plaine RubyDateTime
d'abord, à l'aide de lato_datetime
méthode.Maintenant, il fonctionne (juste testé dans les Rails de la console).
Salut, comment puis-je faire la même chose, mais pas pour maintenant, mais plutôt à partir d'un champ de date?
Trouvé ici: stackoverflow.com/questions/24149463/ruby-strftimeq-broken
OriginalL'auteur steenslag
Javascript
gettime()
renvoie le nombre de millisecondes écoulées depuis l'époque.Ruby
Time.now.to_i
vous donnera le nombre de secondes depuis l'epoch. Si vous modifiez pourTime.now.to_f
, vous obtenez toujours des secondes, mais avec une fraction de la composante. Juste multiplier par 1000 et vous avez millisecondes. Ensuite, utilisez#to_i
pour convertir un nombre entier. Et vous vous retrouvez avec:Juste pour de plus amples informations,
Time.now
vient de Ruby depuisTime.current
vient de Rails. AinsiTime.current
est reconnu par l'application Rails fuseau horaire etTime.now
est de serveur à l'aide du fuseau horaire. Dans mon expérience, toujours utiliserTime.current
sur votre application Rails pour le fuseau horaire de cohérenceNon, vous ne devriez pas utiliser
Time.current
ici, il prend plus de temps à construire, et puisque vous êtes immédiatement en la convertissant en un timestamp unix, vous n'avez pas de soins à tous les temps de la zone de cohérence. (Timestamps Unix est toujours lié à l'UTC). Donc, tout ce que vous dites est vrai dans 99% des cas, celui-ci en terme de performance tombe dans le dernier 1%.C'est mon approche préférée. Une chose que j'aimerais faire, c'est augmenter le Temps de classe pour ajouter une
:epoch
méthode: le Temps de classe def époque (de soi.to_f * 1000).to_i fin fince faux les millisecondes
OriginalL'auteur Anthony DeSimone
(Time.now.to_f * 1000).to_i
devrait faire la même chose.ce qui est faux millisecondes?
Il n'a pas, depuis
to_f
comprend millisecondes comme un nombre décimal.désolé, il simule la nanosecondes
OriginalL'auteur Zach Kemp
Attention, ne pas confondre. Le fait que Ruby est favorable à l'idée de fractions de seconde comme un flotteur n'est pas réellement faire un nombre à virgule flottante. J'ai eu des ennuis avec ce lorsque je faisais Wireshark timestamp comparaisons temps en Python... les calculs de temps dans le ppce-ng n'étaient tout simplement pas de travail. C'est seulement lorsque j'ai traité les deux parties (partie intégrante secondes et fait partie intégrante de nanosecondes) que tous les deux des entiers étais-je en mesure d'obtenir bon nombre.
C'est parce que les nombres à virgule flottante ont Les problèmes de précision. En effet, un petit peu de Ruby va vous montrer que la to_f n'est pas égal à, disons, nsec:
Mise En Garde Programmeur. Vous pouvez être en sécurité à 3 chiffres significatifs, mais le fait demeure: les nombres à virgule Flottante sur les ordinateurs ne sont que des approximations. L'ordre de la nanoseconde compteurs sur les ordinateurs modernes sont des nombres entiers.
.strftime("%9N")
peuvent également être utilisés. ruby-doc.org/core-2.3.1/Time.html#method-i-strftimeOriginalL'auteur Mike S
Obtenir un Le temps objet avec
Time.now
, appelant#to_i
retourne un timestamp Unix (nombre de secondes depuis l'époque).#to_f
donne les fractions de secondes que vous pouvez utiliser pour obtenir millisecondes à partir de l'époque:OriginalL'auteur levinalex
À l'aide de
strftime
, vous pouvez obtenir le nombre de secondes et ajouter les fractions de millisecondes (ou de plus petites unités, si nécessaire):Remarque tout de même que ce n'est pas ronde, il tronque, comme vous pouvez le voir avec
to_f
ou si vous sortez pour microsecondes:et la
to_f
/to_i
solution a le même problème:donc, si vous vous souciez vraiment de la précision de la milliseconde, un meilleur pari peut être
to_f
avecround
:Cela dit, comme indiqué dans les docs, "IEEE 754 double n'est pas assez précis pour représenter le nombre de nanosecondes depuis l'Époque", donc si vous avez vraiment vraiment de soins, d'envisager
to_r
au lieu deto_f
---- bien que si vous êtes seulement à l'arrondissement de millisecondes, vous êtes probablement très bien.
OriginalL'auteur David Moles
Le transtypage Entier(1e6*Temps.maintenant.to_f) renvoie un Bignum qui peut tenir le millisecondes
OriginalL'auteur chava