Jak zdobyć znacznik czasu UTC w Rubim?
Jak zdobyć znacznik czasu UTC w Rubim?
Odpowiedzi:
time = Time.now.getutc
Uzasadnienie: W moich oczach znacznik czasu jest dokładnie tym: punktem w czasie. Można to dokładnie przedstawić za pomocą obiektu. Jeśli potrzebujesz czegoś innego, wartości skalarnej, np. Sekund od epoki Uniksa, interwałów 100 ns od 1601 r. Lub może łańcucha do celów wyświetlania lub przechowywania znacznika czasu w bazie danych, możesz łatwo uzyskać to z obiektu. Ale to zależy w dużej mierze od zamierzonego zastosowania.
Stwierdzenie, że »prawdziwy znacznik czasu to liczba sekund, które upłynęły od epoki Uniksa« to trochę mija się z celem, ponieważ jest to jeden ze sposobów przedstawienia punktu w czasie, ale wymaga również dodatkowych informacji, aby wiedzieć, że masz do czynienia czas, a nie liczba. Time
Obiekt rozwiązuje ten problem ładnie reprezentując punkt w czasie , a także jako wyraźny, co to jest .
Można użyć: Time.now.to_i
.
Moim zdaniem domyślne formatowanie nie jest zbyt przydatne. Wolę ISO8601, ponieważ można go sortować, stosunkowo kompaktowy i powszechnie rozpoznawany:
>> require 'time'
=> true
>> Time.now.utc.iso8601
=> "2011-07-28T23:14:04Z"
/usr/share/ruby/2.0/time.rb
.
Zazwyczaj sygnatura czasowa nie ma strefy czasowej.
% irb
> Time.now.to_i == Time.now.getutc.to_i
=> true
to_f
będzie lepiej
jeśli potrzebujesz czytelnej dla człowieka sygnatury czasowej (tak jak ma to miejsce w przypadku migracji szyn) np. „ 20190527141340 ”
Time.now.utc.to_formatted_s(:number) # using Rails
Time.now.utc.strftime("%Y%m%d%H%M%S") # using Ruby
Po co jest znacznik czasu z jego szczegółowością podawaną w sekundach? Uważam, że praca z nimi jest o wiele bardziej praktyczna Time.now.to_f
. Heck, może nawet rzucić to_s.sub('.','')
się pozbyć przecinkiem lub wykonać typecast takiego: Integer(1e6*Time.now.to_f)
.
Integer(1e3*Time.now.to_f)
tak, że mój znacznik czasu ruby po stronie serwera był taki sam jak javascript po stronie klientaDate.now()
Time.utc(2010, 05, 17)
time = Time.zone.now()
Będzie działać jako
irb> Time.zone.now
=> 2017-12-02 12:06:41 UTC
Właściwym sposobem jest wykonanie a, Time.now.getutc.to_i
aby uzyskać odpowiednią wartość znacznika czasu, ponieważ zwykłe wyświetlenie liczby całkowitej nie musi zawsze być takie samo jak znacznik czasu utc ze względu na różnice stref czasowych.