ruby strptime 格式为自定义格式“%d-%b-%y %I.%M.%S.%9N %p”抛出错误

ruby strptime format throws error for custom format "%d-%b-%y %I.%M.%S.%9N %p"

我正在尝试使用 fluentd(在 ruby 中编写)解析包含一个带有日期时间字符串的字段的传入 csv 文件,但它会因提供的自定义时间格式而引发错误。

为了检查我是否使用了正确的格式,我编写了示例 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 的问题,但无法理解如何解决上面的问题。请建议。

看起来问题出在 %9N - 它不受支持。我把%9N改成%N,解析成功
http://ruby-doc.org/stdlib-1.9.3/libdoc/date/rdoc/DateTime.html 指定格式如 %3N、%9N 等用于解析毫秒、纳秒.. 但它似乎不起作用。 感谢 tadman 怀疑这个说明符。