Làm cách nào để có dấu thời gian UTC trong Ruby?
Làm cách nào để có dấu thời gian UTC trong Ruby?
Câu trả lời:
time = Time.now.getutc
Đặt vấn đề: Trong mắt tôi một dấu thời gian chính xác là: Một điểm trong thời gian. Điều này có thể được đại diện chính xác với một đối tượng. Nếu bạn cần bất cứ thứ gì khác, một giá trị vô hướng, ví dụ vài giây kể từ thời kỳ Unix, 100 giây kể từ năm 1601 hoặc có thể là một chuỗi cho mục đích hiển thị hoặc lưu trữ dấu thời gian trong cơ sở dữ liệu, bạn có thể dễ dàng lấy được từ đối tượng. Nhưng điều đó phụ thuộc rất nhiều vào mục đích sử dụng của bạn.
Nói rằng »dấu thời gian thực là số giây kể từ thời kỳ Unix« thiếu một chút điểm, vì đó là một cách để thể hiện một điểm trong thời gian, nhưng nó cũng cần thêm thông tin để biết rằng bạn đang xử lý một thời gian và không phải là một con số Một Time
đối tượng giải quyết vấn đề này một cách độc đáo bằng cách trình bày một điểm trong thời gian và cũng rõ ràng về nó là gì .
Bạn có thể sử dụng : Time.now.to_i
.
Định dạng mặc định là không hữu ích, theo ý kiến của tôi. Tôi thích ISO8601 vì nó có thể sắp xếp, tương đối nhỏ gọn và được công nhận rộng rãi:
>> require 'time'
=> true
>> Time.now.utc.iso8601
=> "2011-07-28T23:14:04Z"
/usr/share/ruby/2.0/time.rb
.
Thông thường dấu thời gian không có múi giờ.
% irb
> Time.now.to_i == Time.now.getutc.to_i
=> true
to_f
sẽ tốt hơn
nếu bạn cần một dấu thời gian có thể đọc được của con người (như di chuyển đường ray có) ex. " 20190527141340 "
Time.now.utc.to_formatted_s(:number) # using Rails
Time.now.utc.strftime("%Y%m%d%H%M%S") # using Ruby
Điều gì tốt là một dấu thời gian với độ chi tiết của nó được đưa ra trong vài giây? Tôi thấy nó thực tế hơn nhiều khi làm việc với Time.now.to_f
. Heck, bạn thậm chí có thể ném một to_s.sub('.','')
để loại bỏ dấu thập phân hoặc thực hiện một kiểu chữ như thế này : Integer(1e6*Time.now.to_f)
.
Integer(1e3*Time.now.to_f)
để dấu thời gian ruby phía máy chủ của tôi giống như javascript phía máy kháchDate.now()
Time.utc(2010, 05, 17)
time = Time.zone.now()
Nó sẽ hoạt động như
irb> Time.zone.now
=> 2017-12-02 12:06:41 UTC
Cách thích hợp là thực hiện Time.now.getutc.to_i
để có được số lượng dấu thời gian thích hợp vì đơn giản là hiển thị số nguyên không nhất thiết phải giống với dấu thời gian utc do chênh lệch múi giờ.