2016-11-18 48 views
1

我试图确定使用ruby安装的最后一次.rpm的天数,但是当我尝试使用Date类进行格式化时,我发现它是无效的日期(ArguementError)第5行。我已经尝试将其转换为整数的方法,但似乎没有任何工作。有什么想法吗?在Ruby中解析日期字符串时的ArgumentError

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命令

[[email protected] dev]# rpm -qa --last | head -1 | rev | cut -d ' ' -f4-6 | rev 

18 Nov 2016 
+0

您能否提供一个来自'rpm ...'调用的输出示例? – coreyward

+0

是的,它已被添加。 – Blooze

+0

值得注意的是,靠着shell头部,'rev'和'cut'等命令是非常麻烦的。为什么不在Ruby中这样做?将有助于揭露应该做的事情。 – tadman

回答

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对象。

2

您对strptime呼叫不使用你解析日期字符串的正确格式的输出。

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

  • %d是一个月
  • %b的两位数(补零)天被缩写的月份名称
  • %Y是4位数的年份

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

总之,这里是如何从tset解析日期:

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