解析Ruby中的日期字符串时发生ArgumentError

解析Ruby中的日期字符串时发生ArgumentError,ruby,linux,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 = D

我试图确定使用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

您对
strtime
的调用未使用正确的日期字符串格式进行分析

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

  • %d
    是一个月中的两位数(零填充)日
  • %b
    是月份的缩写名称
  • %Y
    是4位数的年份
请注意,这些是以空格分隔的,而不是以连字符分隔的

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

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

您的
rpm
命令的结果是“2016年11月18日”,并且您的
日期。strtime
命令正在查找具有不同格式的日期

更改:

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


我几乎总是求助于帮助我解析
Date
DateTime
对象的标志。

你能提供一个
rpm…
调用的示例输出吗?是的,它已经添加了。值得注意的是,依靠
head
rev
等命令,而且,
切穿
的外壳相当凌乱。为什么不在Ruby中完成这些呢?这将有助于揭示它应该做什么。你能举一个用Ruby做的例子吗?
atime = Date.strptime(tset, '%d %b %Y')