0

我想从包含各种 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 时间戳,我需要选择最新的一个。这是数组元素的列表:

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 时间比较所有数组元素?

谢谢。

4

2 回答 2

3

使用Enumerable#max

a = [ ... ]  # Array of Time instances
latest = a.max

默认情况下,max用于<=>比较事物和Time#<=>存在,所以这可能是最直接的方式。

您的时间戳(几乎)采用ISO 8601 格式,并且比较合理,因此您可以将它们保留为字符串并应用于max字符串数组。

于 2013-09-07T19:45:44.417 回答
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
于 2013-09-07T19:35:16.450 回答