UTC zaman damgası nasıl alınır?


Yanıtlar:


117
time = Time.now.getutc

Gerekçe: Gözlerimde bir zaman damgası tam olarak şudur: Zamanda bir nokta. Bu, bir nesne ile doğru bir şekilde temsil edilebilir. Skaler bir değere, örneğin Unix döneminden sonraki saniyelere, 1601'den bu yana 100 ns aralıklara veya görüntüleme amacıyla veya zaman damgasını veritabanında saklamak için bir dizeye ihtiyacınız varsa, bunu nesneden kolayca alabilirsiniz. Ancak bu büyük ölçüde kullanım amacınıza bağlıdır.

Unix döneminin »gerçek bir zaman damgasının saniye sayısı olduğunu söylemek noktayı biraz eksiktir, çünkü bu, zaman içindeki bir noktayı temsil etmenin bir yoludur, ancak uğraştığınızı bile bilmek için ek bilgilere ihtiyaç duyar. bir sayı değil, bir zaman. Bir Timenesne, zaman içinde bir noktayı temsil ederek ve ne olduğu konusunda açık olarak bu sorunu güzelce çözer .


93
Bu zaman nesnesini verir, gerçek bir zaman damgası için Time.now.to_i'ye gitmelisiniz
rafamvc

3
Benim görüşümde bir nesne yeterince zaman damgasıdır ve hala ihtiyacınız olan tüm özgürlüğe sahipsiniz. Bunu skaler bir değere düşürmek çoğu durumda gerçekten gerekli değildir.
Joey

2
Zaman damgaları döneme göre - hangi saat diliminde olduğunuz önemli değil. Manzhikov'un cevabı daha iyi.
Ryan Mohr

2
Neden unix zaman damgası kullanılmamasının güzel bir açıklaması olsa da, bu OP sorusuna cevap vermiyor (ne de bu yazıyı bulduğumda aynı soruya). Birçok durumda Unix zaman damgaları gereklidir (ör. API'lar için). Açıklamadan sonra bile, bu cevap zaman damgasını almanın gerçek yolunu vermedi.
stuckj

5
@stuckj, soru hiçbir noktada bir Unix zaman damgasından bahsetmez. Ben sadece bu cevap için aşağı oy almaya devam ediyorum çünkü insanlar »timestamp == Unix zaman«, bu yüzden açıklama düşünüyorum.
Joey

247

Sen kullanabilirsiniz: Time.now.to_i.


1
Time.now.getutc.to_i yapmak daha anlamlı olur mu? Yoksa esasen eşdeğer mi?
stuckj

20
zaman damgası tüm zaman dilimlerinde aynıdır. :)
manzhikov

2
Ah evet, duh. Brainfart sorusu. :)
stuckj

bu en uygun yanıt!
Darlan Dieterich

46

Bence varsayılan biçimlendirme çok kullanışlı değil. Sıralanabilir, nispeten kompakt ve yaygın olarak tanınan ISO8601'i tercih ediyorum:

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

1
Bu yöntemin rubydoc.info/docs/rails/ActiveSupport%2FTimeWithZone:iso8601 standart kitaplığında değil ActiveSupport'tan geldiğini unutmayın.
n0nick

3
@ n0nick, 2.0'da bile emin misiniz? Raylar olmadan "vanilya" kurulumlarında kullandığımı biliyorum ve/usr/share/ruby/2.0/time.rb .
Tim Sylvester

15

Genellikle zaman damgasının saat dilimi yoktur.

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

1
to_fdaha iyi olacak
xis

1
duruma göre.
Yuki Matsukura

1
Ne zaman gelmez bir zaman damgası bir saat dilimine sahip?
Dennis

1
zaman damgası saat dilimi ile ilgili değildir. Başka bir deyişle, zaman damgası UTC'dir.
Yuki Matsukura

1
@YukiMatsukura Aslında bu da tamamen doğru değil. Zaman damgası herhangi bir saat dilimini bile temsil etmez, bu nedenle "zaman damgası UTC'dir", "zaman damgası fil kakasıdır" kadar doğrudur. Sorun temsilde. Çoğu geliştirici bunu Unix zaman damgası olarak temsil eder (UTC veya başka bir zaman dilimini göstermez, yalnızca bir tamsayı değeridir).
Pellmeister

10

Eğer insan tarafından okunabilen bir zaman damgasına ihtiyacınız varsa (rayların taşınması gibi) ex. " 20190527141340 "

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

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

7

Zaman damgası, saniyeler içinde verilen ayrıntı düzeyi ile ne işe yarar? Çalışırken çok daha pratik buluyorum Time.now.to_f. Heck, hatta bir şaşırtabilir to_s.sub('.','')ondalık noktasının kurtulmak için, ya böyle bir typecast gerçekleştirin: Integer(1e6*Time.now.to_f).


Teşekkürler. Bunu kullandım: Integer(1e3*Time.now.to_f)böylece sunucu tarafımın yakut zaman damgası istemci tarafı javascript ile Date.now()
aynıydı


-2

time = Time.zone.now()

Olarak çalışacak

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

Jonathan, bu cevapta neyin yanlış olduğunu söyleyebilir misin?
Yıldız

1
Bu, yerel saat dilimi olan Ruby şeylerine bağlıdır. Sadece yerel TZ UTC ise beklendiği gibi çalışacaktır.
MasterCheffinator

-6

Doğru yol, Time.now.getutc.to_itamsayı göstermenin zaman dilimi farklılıkları nedeniyle her zaman utc zaman damgası ile aynı olması gerekmediğinden uygun zaman damgası miktarını elde etmek için a yapmaktır .


7
Diğer herkes bunu söyledi, o zaman neden sadece 3 yıl geç yeni bilgi olmadan kopyalayın?
Kaspar Lee

2
Ve biraz fazla uzun ve tamamen sözdizimsel olarak doğru olmayan 1 cümleyi yapacak noktalama işaretleri olmadan daha net.
Emile Vrijdags
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.