2016-09-29 2 views
0

Ich versuche, eingehende CSV-Dateien zu analysieren, die ein Feld mit Datum/Uhrzeit-Zeichenfolge enthalten mit fluentd (in Ruby geschrieben), aber es wirft Fehler für das benutzerdefinierte Zeitformat.ruby ​​strptime formatiert Fehler für benutzerdefiniertes Format "% d-% b-% y% I.% M.% S.% 9N% p"

Um zu überprüfen, ob ich das richtige Format verwende, schrieb ich Probe Ruby-Code (nicht ein Ruby-Programmierer so online Ruby IDE verwendet) und festgestellt, dass das Format funktioniert gut, wenn ich versuche, mit ihm zu schreiben, aber Ruby wirft Fehler, wenn ich es versuche

[ code ] 

require 'time' 

time = Time.new 
puts "writing time : " + time.strftime("%d-%b-%y %I.%M.%S.%9N %p") 
newtime = Time.strptime("29-Sep-16 07.45.45.331680519 PM", "%d-%b-%y %I.%M.%S.%9N %p") 
puts "reading time : " + newtime 

[ output ] 

sh-4.3$ ruby main.rb                                  
writing time : 29-Sep-16 05.47.36.206929933 PM                           
/usr/share/ruby/time.rb:427:in `strptime': invalid strptime format - `%d-%b-%y %I.%M.%S.%9N %p' (ArgumentError)           
    from main.rb:10:in `<main>' 

ich viele Beiträge überprüft, wo die Menschen gefunden Probleme mit strptime konnte aber nicht verstehen, wie oben zu lösen: in diesem Format zu lesen. Bitte suggerieren.

+0

'% 9N'? Was ist das? Wenn beim Debuggen Probleme wie diese beginnen, die Dinge zu löschen, bis sie funktionieren, dann setze Sachen zurück, bis sie kaputt gehen. Dann haben Sie Ihren Problemcode gefunden. – tadman

+1

@tadman:% 9N gibt an, dass der Wert hier Nanosekunden ist und eine Breite von 9 Ziffern hat. Ich habe versucht, Diff-Kombinationen wie Parsing nur Datum usw., aber strptime funktioniert einfach nicht. Checked Dokumentation für Strptime aber sieht aus wie meine Verwendung korrekt ist, also nicht klar, wo der Fehler ist. –

+1

@tadman: Sieht so aus, als hättest du Recht gehabt. % 9N scheint nicht unterstützt zu werden, obwohl es hier als unterstützt erwähnt wird - http://ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/DateTime.html. Als ich% 9N in% N änderte, war das Parsen erfolgreich. Vielen Dank. –

Antwort

2

Sieht aus wie das Problem mit% 9N war - es wird nicht unterstützt. Ich habe% 9N in% N geändert und das Parsing war erfolgreich.
http://ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/DateTime.html spezifiziert Formate wie% 3N,% 9N usw. für die Analyse von Millisekunden, Nanosekunden .. aber es scheint nicht zu funktionieren. Danke an tadman für den Verdacht dieses Spezifizierers.

Verwandte Themen