#ruby-on-rails #ruby #strptime
#ruby-on-rails #ruby #strptime
Вопрос:
Я пытаюсь проанализировать входящие csv-файлы, содержащие одно поле со строкой даты и времени, используя fluentd (написанный на ruby), но он выдает ошибку для предоставленного пользовательского формата времени.
Чтобы проверить, правильно ли я использую формат, я написал пример кода ruby (не программист ruby, поэтому использовал онлайн ruby IDE) и обнаружил, что формат хорошо работает, когда я пытаюсь писать с его использованием, но ruby выдает ошибку, когда я пытаюсь читать с использованием этого формата :
[ 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>'
Я проверил много сообщений, в которых люди находили проблемы с strptime, но не могли понять, как решить выше. Пожалуйста, предложите.
Комментарии:
1.
%9N
? Что это? При отладке подобных проблем начинайте удалять вещи, пока они не заработают, затем возвращайте вещи, пока они не сломаются. Тогда вы нашли код проблемы.2. @tadman : %9N указывает, что значение здесь равно наносекундам и имеет ширину 9 цифр. Я пробовал различные комбинации, такие как синтаксический анализ только даты и т. Д., Но strptime просто не работает. Проверил документацию для strptime, но похоже, что мое использование правильное, поэтому неясно, где ошибка.
3. @tadman: Похоже, вы были правы, указав. %9N, похоже, не поддерживается, хотя он упоминается здесь как поддерживаемый — ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/DateTime.html . Когда я изменил %9N на %N, синтаксический анализ прошел успешно. Спасибо.
Ответ №1:
Похоже, проблема была с %9N — он не поддерживается. Я изменил %9N на %N, и синтаксический анализ прошел успешно.
http://ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/DateTime.html задает форматы, такие как %3N, %9N и т.д., для синтаксического анализа миллисекунд, наносекунд.. но, похоже, это не работает. Спасибо tadman за подозрение в этом спецификаторе.