RubyでUTCタイムスタンプを取得する方法


回答:


117
time = Time.now.getutc

理論的根拠:私の目には、タイムスタンプはまさにそれです:ある時点。これはオブジェクトで正確に表すことができます。その他、スカラー値、たとえばUnixエポックからの秒数、1601からの100ナノ秒間隔、または表示目的の文字列やデータベースへのタイムスタンプの格納が必要な場合は、オブジェクトから簡単に取得できます。しかし、それはあなたの使用目的に大きく依存します。

「真のタイムスタンプは、Unixエポックからの秒数」であると言います。これは、ある時点を表す1つの方法であるためですが、対処していることを知るためにも追加情報が必要です。時間ではなく数。Timeオブジェクトは、特定の時点を表すことによってうまくこの問題を解決しても、それが何であるかについて明示的であること


93
これは時間オブジェクトを与えるので、真のタイムスタンプを得るためにTime.now.to_iに行く必要があります
rafamvc

3
私の意見では、オブジェクトには十分なタイムスタンプがあり、必要なすべての自由がまだあります。これをスカラー値に減らすことは、ほとんどの場合実際には必要ありません。
Joey

2
タイムスタンプはエポックに相対的です。どのタイムゾーンにいるかは関係ありません。manzhikovの答えがより適切です。
Ryan Mohr 2012

2
unixタイムスタンプを使用しない理由についての良い説明はありますが、これはOPの質問(この投稿を見つけたときと同じ質問でもありません)には答えません。多くの場合、UNIXタイムスタンプが必要です(APIなど)。説明の後でも、この答えはタイムスタンプを取得する実際の方法を提供しませんでした。
stuckj 2013年

5
@stuckj、質問ではUnixタイムスタンプについて言及していません。人々は»timestamp == Unix時間«と考えているように見えるため、私はこの回答に対する反対票を集め続けています。
Joey


46

私の意見では、デフォルトのフォーマットはあまり役に立ちません。ISO8601は、並べ替え可能で、比較的コンパクトで広く認知されているため、私はそのほうを好みます。

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

1
このメソッドは、標準ライブラリrubydoc.info/docs/rails/ActiveSupport%2FTimeWithZone:iso8601
n0nick

3
@ n0nickは2.0でも確かですか?レールなしの「バニラ」インストールなどで使用したことは知っています/usr/share/ruby/2.0/time.rb
Tim Sylvester

15

通常、タイムスタンプにはタイムゾーンがありません。

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

1
to_f良くなる
xis 14

1
状況によります。
松倉有希

1
ときにないタイムスタンプは、タイムゾーンを持っていますか?
デニス

1
タイムスタンプはタイムゾーンとは関係ありません。つまり、タイムスタンプはUTCです。
松倉有希2014年

1
@YukiMatsukura実際、それも完全に正確ではありません。タイムスタンプはタイムゾーンを表すものでもないため、「タイムスタンプはUTC」は「タイムスタンプは象のうんち」と同じくらい当てはまります。問題は表現にあります。ほとんどの開発者は、それをUnixタイムスタンプとして表します(これは単なる整数値であるため、UTCまたは他のタイムゾーンを示しません)。
ペルマイスター2017年

10

人間が読み取れるタイムスタンプが必要な場合(Railsの移行と同様)。「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ます。一体、to_s.sub('.','')小数点を取り除くためにをスローしたり、次のような型キャストを実行したりすることもできますInteger(1e6*Time.now.to_f)


ありがとう。私はこれを使用しました。Integer(1e3*Time.now.to_f)これにより、サーバー側のルビのタイムスタンプがクライアント側のJavaScriptと同じになりましたDate.now()
joshweir


-2

time = Time.zone.now()

それはとして機能します

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

ジョナサン、この答えで何が悪いのか教えてもらえますか?
アスタリスク2017

1
これは、ローカルのタイムゾーンがRubyのものであることによって異なります。ローカルTZがUTCである場合にのみ、期待どおりに機能します。
MasterCheffinator 2017

-6

適切な方法はTime.now.getutc.to_i、適切なタイムスタンプ量を取得するためにaを実行することです。これは、単に整数を表示することは、タイムゾーンの違いにより、必ずしもutcタイムスタンプと同じである必要はないためです。


7
他の誰もがそれを言ったので、なぜ新しい情報なしで、3年遅れでそれを単にコピーするのですか?
Kaspar Lee

2
そして、1文を作る句読点がないため、少し長くなり、完全に構文的に正しくなく、明確になります。
Emile Vrijdags 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.