在Ruby中解析日期字符串时出现ArgumentError

时间:2016-11-18 21:38:00

标签: ruby linux

我正在尝试确定使用ruby安装的最后一个.rpm的天数,但是当我尝试使用Date类进行格式化时,我发现它是第5行的无效日期(ArguementError)我已经尝试过将它转换为整数的方法,但似乎没有任何效果。有什么想法吗?

require 'date'
require 'time'

tset = `rpm -qa --last | head -1 | rev | cut -d ' ' -f4-6 | rev`
atime = Date.strptime(tset, '%Y-%m-%d')
today = Date.today
btime = Date.strptime(today, '%Y-%m-%d')
daterange = ("btime - atime")
puts daterange

这是我的rpm命令的输出

[root@default-centos-67 dev]# rpm -qa --last | head -1 | rev | cut -d ' ' -f4-6 | rev

18 Nov 2016

2 个答案:

答案 0 :(得分:2)

您对strptime的调用未使用正在解析的日期字符串的正确格式。

正确的日期字符串为:%d %b %Y

  • %d是该月的两位数(零填充)日
  • %b是缩写的月份名称
  • %Y是4位数年份

请注意,这些是以空格分隔的,而不是以连字符分隔的。

总之,以下是如何从tset解析日期:

Date.strptime(tset, '%d %b %Y')

答案 1 :(得分:1)

rpm命令的结果是" 2016年11月18日"并且您的Date.strptime命令正在寻找具有不同格式的日期。

变化:

atime = Date.strptime(tset, '%Y-%m-%d')

atime = Date.strptime(tset, '%d %b %Y')

我几乎总是转向the documentation on strftime来帮助我解析用于解析DateDateTime个对象的标记。