2017-10-04 4 views
0

je le format horaire suivant:Convertir un temps de nanosecondes en Ruby

require 'time' 

input = "2016-10-04_00.50.31.147" 
format = "%Y-%m-%d_%H.%M.%S.%N" 

time = Time.strptime(input, format) 

Comment puis-je obtenir le nombre de nanosecondes depuis l'époque?

+0

Votre temps semble se tromper. D'une certaine manière, '147' est interprété comme des millisecondes, pas des nanosecondes. – sawa

+1

@sawa '% N' analyse les secondes fractionnaires, c'est-à-dire' 147' est interprété comme 0,147 secondes. – Stefan

+1

@marco quel est votre résultat escompté? – Stefan

Répondre

1

Cela devrait vous donner la valeur:

time.to_f * (10 ** 9) 

Si vous voulez un entier, appliquez to_i ou tout à elle. Cependant, notez que votre time est erroné, donc il ne donnerait pas les bons résultats.

+3

Ou 'time.to_i * (10 ** 9) + time.nsec' pour éviter les erreurs en virgule flottante. – Stefan

-2

Pas tout à fait sûr de ce que vous voulez atteindre, mais pour nanosecondes je recommande regarder nsec, il peut vous aider:

https://ruby-doc.org/core-2.2.2/Time.html#method-i-nsec

https://apidock.com/ruby/Time/nsec

Par ex

2.3.3 :001 > t = Time.now 
=> 2017-10-04 09:09:33 +0200 
2.3.3 :002 > t.nsec 
=> 521053000 
+0

C'est la partie de la nanoseconde du temps, pas tout le temps exprimé en nanosecondes. – sawa

+0

Par conséquent pourquoi je l'ai dit pour nanosecondes (nanosecondes, c'est-à-dire la composante nanoseconde du temps), je recommanderais de regarder nsec. – Stuart