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 怀疑这个说明符。
我正在尝试使用 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 怀疑这个说明符。