2016-11-18 52 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')