2017-06-04 25 views
0

Rubyでこれを達成する最も簡単な方法は何ですか?Rubyでタイムスタンプを比較する方法

私は2つの文字列を持っている:私は日付オブジェクトに各文字列を変換する必要があり

a = "08:02:04.982" 
b = "10:07:12.004" 

は、(それ以降)aよりbが大きいことを確実にするために比較します。以下のような:

Time.parse("08:02:04.982") 

が、それは日付を返すことを主張:

if b > a 
    print "this is normal" 
else 
    print "this is not normal" 
end 

私が使用してみました。

だから私は試してみました:

Time.parse("08:02:04.982", "%H:%M:%S.%3N") 

をそれは未定義のメソッド "年" について文句を言います。

+2

なぜ時間表現を比較したいですか?その文字列表現は 'a < b #=> true'と' b < a #=> false'を返す – spickermann

+1

'parse'ではなく' strptime'を返します – Stefan

+0

うわー!Rubyの文字列の比較では、文字列の値を時間型にキャストして、その背後で比較していますか?それは素晴らしいことです!ありがとうございました! – user3202399

答えて

-1

この黙想:時間値を比較する日付コンポーネントなし

require 'time' 

TIME_FORMAT = '%H:%M:%S.%n' 

a = "08:02:04.982" 
b = "10:07:12.004" 

a_time = Time.strptime(a, TIME_FORMAT) # => 2017-06-04 08:02:04 -0700 
b_time = Time.strptime(b, TIME_FORMAT) # => 2017-06-04 10:07:12 -0700 

a_time < b_time # => true 
a_time > b_time# => false 
a_time <=> b_time # => -1 

は危険です。同じ日に時が出ているかどうかは分かりません。時間は、その情報が表示されない場合は現在の「今日」を供給しますが、日付が同じかどうか不明な場合はバグかもしれません。あなたが見つけたよう

、あなたは時間や日時のオブジェクトに変換することなく、2つの等しくフォーマットされた文字列を比較することができます

a < b # => true 
a > b # => false 
a <=> b # => -1 

をあなたは持っていなかった時刻文字列を受け取った場合ので、あなたは、しかし注意する必要がありますそれは正確にテストしたいオブジェクトに解析するとともに、一方で、その後、あなたの比較は間違っているだろう任意の列にゼロをリードする:

"8:2:4.982" == "08:02:04.982" # => false 
Time.strptime("8:2:4.982", TIME_FORMAT) # => 2017-06-04 08:02:04 -0700 
Time.strptime("08:02:04.982", TIME_FORMAT) # => 2017-06-04 08:02:04 -0700 

は(そして、はい、それはあなたが先行ゼロなしで日付と時刻を得ることができる非常に可能です。インターネットの野生では、あらゆる種類のクレイジーなt 。hingsが起こる)


を私が使用してみました:

Time.parse("08:02:04.982") 

をそれは日付を返すことを主張しました。

うーん...ない:あなたは、着信日付/日時文字列のロケールを知っている限り

Time.parse("08:02:04.982").class # => Time 
Time.parse("08:02:04.982") # => 2017-06-04 08:02:04 -0700 

parseに依存しないでください。理由を調べることができます。代わりに、文字列が一貫した形式であれば、独自の書式文字列を定義します。より速く、より信頼できるでしょう。

関連する問題