我想从包含各种UTC时间的数组中提取最新的UTC时间。 我可以比较UTC中的两个时间戳如下:
#!/usr/bin/ruby
require "time"
a=Time.parse("2013-05-03 16:25:35 UTC")
b=Time.parse("2013-09-07 06:51:24 UTC")
if b < a
puts "latest time is #{a}"
else
puts "latest time is #{b}"
end
输出:
latest time is 2013-09-07 06:51:24 UTC
这样可以只比较两个时间戳。但是我的数组包含2个以上的UTC时间戳,我需要选择最新的时间戳。以下是Array元素列表:
2013-04-30 12:13:20 UTC
2013-09-07 06:51:24 UTC
2013-05-03 16:25:35 UTC
2013-08-01 07:28:59 UTC
2013-04-09 13:42:36 UTC
2013-09-04 11:40:20 UTC
2013-07-01 06:47:52 UTC
2013-05-03 16:21:54 UTC
我想从数组中选择最新时间2013-09-07 06:51:24 UTC
问题: 如何根据UTC时间比较所有数组元素?
感谢。
答案 0 :(得分:3)
a = [ ... ] # Array of Time instances
latest = a.max
默认情况下,max
使用<=>
来比较事物并Time#<=>
存在,所以这可能是最直接的方式。
您的时间戳(几乎)在ISO 8601 format中,并且那些比较合理,因此您可以将它们保留为字符串并将max
应用于字符串数组。
答案 1 :(得分:2)
确切方法是Array#sort
或直接一个Enumerable#max
require 'time'
time_ar = [ '2013-04-30 12:13:20 UTC',
'2013-09-07 06:51:24 UTC',
'2013-05-03 16:25:35 UTC',
'2013-08-01 07:28:59 UTC',
'2013-04-09 13:42:36 UTC',
'2013-09-04 11:40:20 UTC',
'2013-07-01 06:47:52 UTC',
'2013-05-03 16:21:54 UTC'
]
time_ar.map(&Time.method(:parse)).sort.last
# => 2013-09-07 06:51:24 UTC
time_ar.map(&Time.method(:parse)).max
# => 2013-09-07 06:51:24 UTC