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


Answers:


117
time = Time.now.getutc

理由:在我眼中,时间戳就是:时间点。可以用一个对象准确地表示出来。如果您还需要其他标量值,例如距Unix纪元以来的秒数,自1601年以来的100 ns间隔,或者可能是用于显示目的或将时间戳记存储在数据库中的字符串,则可以从对象中轻松获取。但这在很大程度上取决于您的预期用途。

说“真正的时间戳”是自Unix纪元以来的秒数,这有点失误,因为这是表示时间点的一种方式,但它还需要其他信息才能知道您正在处理时间而不是数字。一个Time对象通过表示一个时间点并且明确表示什么是一个很好的解决这个问题的方法


93
这给出了时间对象,您应该给Time.now.to_i一个真实的时间戳
rafamvc'1十一月

3
在我看来,一个物体足够坚固,而您仍然拥有所需的所有自由。在大多数情况下,将其减小为标量值并不是真正必要的。
乔伊(Joey)2012年

2
时间戳是相对于时代的,与您处于哪个时区无关。manzhikov的答案是更好的答案。
瑞安·莫尔

2
尽管很好地解释了为什么不使用unix时间戳,但这并没有回答OP问题(也没有找到这篇文章时遇到的相同问题)。在许多情况下(例如,对于API),需要Unix时间戳。即使经过了解释,该答案也没有给出获取时间戳的实际方法。
stickj

5
@stuckj,问题根本没有提到Unix时间戳。我只是继续对这个答案不满意,因为人们似乎认为»timestamp == Unix time«,因此进行了解释。
乔伊,


46

我认为默认格式不是很有用。我更喜欢ISO8601,因为它可排序,相对紧凑并且得到广泛认可:

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

1
请注意,此方法来自ActiveSupport,而不是标准库rubydoc.info/docs/rails/ActiveSupport%2FTimeWithZone:iso8601
n0nick

3
您确定@ n0nick,即使在2.0中也是如此?我知道我已经在没有导轨等的“香草”安装中使用了它,并且它在中/usr/share/ruby/2.0/time.rb
蒂姆·西尔维斯特

15

通常时间戳没有时区。

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

1
to_f会更好
xis 2014年


1
如果没有时间戳有一个时区?
丹尼斯

1
时间戳与时区无关。换句话说,时间戳是UTC。
松仓由纪(Yuki Matsukura)2014年

1
@YukiMatsukura实际上,这也不完全准确。时间戳甚至不代表任何时区,因此“时间戳为UTC”与“时间戳为大象便便”一样真实。问题在于表现形式。大多数开发人员将其表示为Unix时间戳(由于它只是整数值,因此不表示UTC或任何其他时区)。
The Pellmeister '17

10

例如,如果您需要人类可读的时间戳(例如rails migration具有)。“ 20190527141340

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

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

7

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


谢谢。我用了这个:Integer(1e3*Time.now.to_f)所以我的服务器端ruby时间戳与客户端javascript相同Date.now()
joshweir


-2

time = Time.zone.now()

它将作为

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

乔纳森,你能告诉我这个答案有什么问题吗?
星号

1
这取决于Ruby所在的时区是什么。仅当本地TZ为UTC时,它才能按预期工作。
MasterCheffinator

-6

正确的方法是执行操作Time.now.getutc.to_i以获取正确的时间戳量,因为由于时区不同,仅显示整数不必总是与utc时间戳相同。


7
其他人都这么说,那为什么要迟三年再复制而又不提供新信息呢?
Kaspar Lee

2
而且没有标点符号可以使第一个句子更清晰,该句子有点长,语法上也不完全正确。
Emile Vrijdags '17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.