如何在 Ruby 中获得 UTC 时间戳?

如何在 Ruby 中获得 UTC 时间戳?

162381 次浏览
time = Time.now.getutc

理由: 在我看来,时间戳就是: 一个时间点。这可以用对象精确地表示。如果您还需要其他东西,比如标量值,比如 Unix 时代以来的秒数,1601年以来的100-ns 间隔,或者用于显示目的的字符串,或者将时间戳存储在数据库中,您可以很容易地从对象中获得这些信息。但这在很大程度上取决于你的预期用途。

说“真正的时间戳是自 Unix 时代以来的秒数”有点不着边际,因为这是表示一个时间点的 方式,但它也需要额外的信息才能知道你正在处理的是一个时间而不是一个数字。Time对象通过表示时间 也清楚地表明了它是什么中的一个点很好地解决了这个问题。

Time.utc(2010, 05, 17)

你可以使用: Time.now.to_i

在我看来,默认格式并不是很有用。我更喜欢 ISO8601,因为它可以分类,相对紧凑,而且被广泛认可:

>> require 'time'
=> true
>> Time.now.utc.iso8601
=> "2011-07-28T23:14:04Z"

正确的方法是执行 Time.now.getutc.to_i以获得适当的时间戳数量,因为由于时区的差异,仅仅显示整数并不总是与 utc 时间戳相同。

通常时间戳没有时区。

% irb
> Time.now.to_i == Time.now.getutc.to_i
=> true

以秒为单位给出粒度的时间戳有什么用?我发现使用 Time.now.to_f更实用。见鬼,您甚至可以抛出一个 to_s.sub('.','')来去掉小数点,或者执行如下类型转换: Integer(1e6*Time.now.to_f)

time = Time.zone.now()

它会像

irb> Time.zone.now
=> 2017-12-02 12:06:41 UTC

如果你需要一个人类可读的时间戳(像 Rails 迁移一样) ,例如“ 20190527141340

Time.now.utc.to_formatted_s(:number)  # using Rails


Time.now.utc.strftime("%Y%m%d%H%M%S") # using Ruby