在Ruby中实现这一目标的最简单方法是什么?
我有两个字符串:
a = "08:02:04.982"
b = "10:07:12.004"
我需要将每个字符串转换为日期对象,然后进行比较以确保b
比a
更大(稍后)。如:
if b > a
print "this is normal"
else
print "this is not normal"
end
我尝试使用:
Time.parse("08:02:04.982")
但是坚持要求约会。
所以我试过了:
Time.parse("08:02:04.982", "%H:%M:%S.%3N")
但抱怨未定义的方法"年"。
答案 0 :(得分:-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
没有日期组件比较时间值是有风险的。很难知道时间是否在同一天发生。时间将提供当前&#34;今天&#34;如果它没有看到这些信息,但如果您不确定日期是否相同,则可能是一个错误。
如您所见,您可以比较两个格式相同的字符串,而无需将它们转换为Time或DateTime对象:
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
(而且,是的,很有可能你可以获得没有领先零的日期和时间。在互联网的荒野中,各种各样的疯狂事情都会发生。)
我尝试使用:
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
除非您知道传入日期/日期时间字符串的LOCALE,否则不要依赖parse
。你可以研究一下原因。相反,如果字符串采用一致的形式,则定义自己的格式字符串。它会更快,更可靠。