2016-11-18 12 views
1

Rubyを使用してインストールされた最後の.rpmから日数を特定しようとしていますが、Dateクラスを使用してフォーマットしようとすると無効です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

シェルを使って 'head'、' rev'、 'cut'などのコマンドを傾けた方が面倒です。なぜRubyでそれをしないのですか?それが何をしているのかを明らかにするのに役立ちます。 – tadman

答えて

1

あなたrpmコマンドの結果は、「2016年11月18日」であり、あなたのDate.strptimeコマンドが異なる形式で日付を探しています。

変更:

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

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

私はほとんど常にDateDateTimeオブジェクトを解析するためのフラグを手伝ってthe documentation on strftimeに向けます。

2

あるstrptimeへのあなたの呼び出しは、あなたがパースされている日付文字列の正しい形式を使用していません。

正しい日付文字列は次のとおりです。%d %b %Y

  • %d月の2桁(ゼロパディング)日
  • %b
  • %Y月の省略名である4桁の年
  • です

これらはスペース区切りで、ハイフンで区切られていないことに注意してください。すべて一緒に

、ここtsetから日付を解析する方法は次のとおりです。

Date.strptime(tset, '%d %b %Y') 
関連する問題