この黙想:時間値を比較する日付コンポーネントなし
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
に依存しないでください。理由を調べることができます。代わりに、文字列が一貫した形式であれば、独自の書式文字列を定義します。より速く、より信頼できるでしょう。
なぜ時間表現を比較したいですか?その文字列表現は 'a < b #=> true'と' b < a #=> false'を返す – spickermann
'parse'ではなく' strptime'を返します – Stefan
うわー!Rubyの文字列の比較では、文字列の値を時間型にキャストして、その背後で比較していますか?それは素晴らしいことです!ありがとうございました! – user3202399