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

Moh*_*ain 130 ruby timestamp

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

man*_*kov 237

你可以使用:Time.now.to_i.

  • 所有时区的时间戳都相同.:) (20认同)
  • 执行 Time.now.getutc.to_i 会更有意义吗?或者说这本质上是等价的? (2认同)
  • 哦是的,呃.Brainfart问题.:) (2认同)

Joe*_*oey 109

time = Time.now.getutc
Run Code Online (Sandbox Code Playgroud)

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

说»真正的时间戳是自Unix时代以来的秒数«有点遗漏这一点,因为这是表示时间点的一种方式,但它还需要额外的信息才能知道你正在处理时间而不是数字.一个Time对象通过表示一个时间点并且明确它是什么来很好地解决这个问题.

  • 这给了时间对象,你应该给Time.now.to_i一个真正的时间戳 (89认同)
  • @stuckj,在任何时候问题都没有提到Unix时间戳.我只是继续为这个答案投票,因为人们似乎认为»timestamp == Unix time«,因此解释. (4认同)
  • 在我的意见中,一个物体足够时间,你仍然拥有所需的所有自由.在大多数情况下,将其降低到标量值并不是必需的. (3认同)
  • 时间戳是相对于时代的 - 与你所在的时区无关.Manzhikov的答案是更好的. (2认同)
  • 虽然很好地解释了为什么不使用unix时间戳,但这并没有回答OP问题(当我发现这篇文章时也没有回答同样的问题).在许多情况下(例如,对于API),需要Unix时间戳.即使在解释之后,这个答案也没有给出获得时间戳的实际方法. (2认同)
  • 如果OP意味着"时间戳"表示自纪元以来经过的秒数,则问题本身是无用的,因为单词"UTC"是多余的.这是正确的答案,或者问题是无法完善的. (2认同)

Tim*_*ter 45

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

>> require 'time'
=> true
>> Time.now.utc.iso8601
=> "2011-07-28T23:14:04Z"
Run Code Online (Sandbox Code Playgroud)

  • 您确定@ n0nick,即使在2.0中也是如此?我知道我已经在没有导轨等的“香草”安装中使用了它,并且它在`/ usr / share / ruby​​ / 2.0 / time.rb`中。 (2认同)

Yuk*_*ura 15

通常时间戳没有时区.

% irb
> Time.now.to_i == Time.now.getutc.to_i
=> true
Run Code Online (Sandbox Code Playgroud)


Kat*_*aya 15

如果您需要一个人类可读的时间戳(如 Rails 迁移有),例如。《20190527141340

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

Time.now.utc.strftime("%Y%m%d%H%M%S") # using Ruby
Run Code Online (Sandbox Code Playgroud)


小智 7

什么是时间戳,其粒度在几秒钟内给出?我觉得使用Time.now.to_f更加实用.哎呀,你甚至可以抛出一个to_s.sub('.','')去掉小数点,或者执行类似这样的类型转换:Integer(1e6*Time.now.to_f).