默想这样的:
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
没有一个日期分量与时间值是有风险的。很难知道时间是否在同一天发生。如果没有看到该信息,时间将会提供当前的“今日”,但如果您不确定日期是否相同,它可能会成为一个错误。
当你发现,你可以比较两个同样格式的字符串,而不将它们转换为时间或日期时间对象:
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
(是的,这是非常可能的,你可以得到的日期和时间,没有前导零在互联网的狂野之中,各种各样的疯狂hings发生)
我试着使用:
Time.parse("08:02:04.982")
但坚持要返回的日期。
嗯... NO:
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
您想'strptime',而不是'parse' – Stefan
哇!Ruby字符串比较是将字符串值转换为时间类型并比较后面的情况?那很棒!谢谢! – user3202399