2010-05-31 32 views

Trả lời

90
time = Time.now.getutc 

Lý do: Trong mắt tôi một dấu thời gian là chính xác rằng: Một điểm trong thời gian. Điều này có thể được biểu diễn chính xác với một đối tượng. Nếu bạn cần bất kỳ điều gì khác, giá trị vô hướng, ví dụ: giây kể từ thời đại Unix, khoảng thời gian 100 ns kể từ 1601 hoặc có thể là một chuỗi cho mục đích hiển thị hoặc lưu dấu thời gian trong cơ sở dữ liệu, bạn có thể dễ dàng nhận được điều đó 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 đại Unix« là một chút thiếu điểm, vì đó là một cách đại diện cho một thời điểm, nhưng cũng cần thêm thông tin để biết rằng bạn đang đối phó với một thời gian và không phải là một con số. Đối tượng Time giải quyết vấn đề này một cách độc đáo bằng cách biểu diễn một điểm trong thời gian và cũng đang rõ ràng về nội dung là.

+74

Điều đó cho các đối tượng thời gian, bạn nên để Time.now.to_i cho một dấu thời gian đúng – rafamvc

+3

Trong opninion tôi một đối tượng là timestampy đủ và bạn có vẫn tất cả sự tự do bạn cần. Giảm nó thành giá trị vô hướng trong hầu hết các trường hợp không thực sự cần thiết. – Joey

+2

Dấu thời gian có liên quan đến kỷ nguyên - không quan trọng bạn đang ở múi giờ nào. Câu trả lời của manzhikov là câu trả lời hay nhất. –

1

Time.utc(2010, 05, 17)

204

Bạn có thể sử dụng: Time.now.to_i.

+1

Làm cho Time.now.getutc.to_i có ý nghĩa hơn không? Hoặc về cơ bản là tương đương? – stuckj

+11

dấu thời gian giống nhau ở mọi múi giờ. :) – manzhikov

+1

Ồ vâng, duh. Câu hỏi Brainfart. :) – stuckj

35

Định dạng mặc định không phải là rất hữu ích, theo ý kiến ​​của tôi. Tôi thích ISO8601 như đó là sắp xếp được, 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" 
+0

Lưu ý rằng phương pháp này đến từ ActiveSupport, không phải trong thư viện chuẩn http://www.rubydoc.info/docs/rails/ActiveSupport%2FTimeWithZone:iso8601 – n0nick

+1

@ n0nick bạn chắc chắn, ngay cả trong 2.0? Tôi biết tôi đã sử dụng nó trên "vanilla" cài đặt mà không có đường ray vv, và nó trong '/ usr/share/ruby ​​/ 2.0/time.rb'. –

+1

vừa thử lại. bạn đúng rồi. xin lỗi về điều đó – n0nick

-4

Cách đúng là để làm một Time.now.getutc.to_i để có được số lượng dấu thời gian đúng như chỉ hiển thị số nguyên không cần phải luôn luôn giống như dấu thời gian utc do chênh lệch múi giờ.

+4

Mọi người khác đều nói vậy, vậy tại sao chỉ sao chép nó, không có thông tin mới, trễ 3 năm? – Druzion

+0

Và không có dấu chấm câu nào có thể làm cho câu 1, mà là một chút quá dài và không hoàn toàn cú pháp chính xác, rõ ràng hơn. –

11

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 
+0

'to_f' sẽ tốt hơn – xis

+1

tùy thuộc vào tình huống. –

+0

Khi * không * dấu thời gian có múi giờ? – Dennis

3

Dấu thời gian với độ chi tiết của nó được tính bằng giây là gì? Tôi thấy nó hoạt động thực tế hơn nhiều với Time.now.to_f. Heck, bạn thậm chí có thể ném một to_s.sub ('.', '') Để thoát khỏi dấu thập phân, hoặc thực hiện một typecast như thế này: Integer (1e6 * Time.now.to_f).

-1

time = Time.zone.now()

Nó sẽ làm việc như

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

Jonathan, bạn có thể cho tôi biết có gì sai trong câu trả lời này không? – Asterisk

+0

Điều này phụ thuộc vào thứ Ruby là múi giờ địa phương. Nó sẽ làm việc như mong đợi chỉ khi TZ địa phương là UTC. – MasterCheffinator

Các vấn đề liên quan