Gọi Date.today
trong Ruby trả về ngày hiện tại. Tuy nhiên, múi giờ là gì? Tôi cho rằng UTC, nhưng tôi muốn chắc chắn. Các documentation không nhà nước một trong hai cách.Có phải Date.today ở UTC không?
Trả lời
Ngày không có múi giờ vì chúng không đại diện cho thời gian.
Điều đó nói rằng, như đối với cách nó tính toán ngày hiện tại, chúng ta hãy nhìn vào chiết xuất này từ the code for Date.today
:
time_t t;
struct tm tm;
// ...
if (time(&t) == -1)
rb_sys_fail("time");
if (!localtime_r(&t, &tm))
rb_sys_fail("localtime");
Sau đó tiến hành để sử dụng sử dụng tm
để tạo ra các đối tượng Date
. Vì tm
có thời gian địa phương của hệ thống bằng cách sử dụng localtime()
, Date.today
do đó sử dụng thời gian địa phương của hệ thống chứ không sử dụng UTC.
Bạn luôn có thể sử dụng Time#utc
trên bất kỳ Time
chuyển đổi nó tại chỗ để UTC, hoặc Time#getutc
để trả về một đối tượng mới tương đương Time
trong UTC. Sau đó, bạn có thể gọi số Time#to_date
để nhận số Date
. Vì vậy: some_time.getutc.to_date
.
Nếu bạn đang sử dụng ActiveSupport’s time zone support (có trong Rails), lưu ý rằng nó là hoàn toàn tách biệt với nhà xây dựng thời gian Ruby và không ảnh hưởng đến họ (tức là nó không thay đổi như thế nào Time.now
hoặc Date.today
làm việc). Xem thêm ActiveSupport extensions to Time
.
Ví dụ về Ngày được biểu diễn dưới dạng Số Ngày Julian Thiên văn; nó không có phần phân đoạn của một ngày. Trong khi một ngày Julian là tương đối so với GMT - vì vậy về mặt kỹ thuật một ví dụ của ngày nên được coi là trong GMT - cho hầu hết các mục đích bạn có thể bỏ qua và xử lý nó như không có múi giờ. Bạn sẽ chỉ quan tâm đến múi giờ nếu bạn chuyển đổi múi giờ thành Ngày giờ hoặc Thời gian.
Công cụ của ActiveSupport cho chuyển đổi ngày cho phép bạn chỉ định xem bạn có muốn giờ địa phương hay UTC hay không.
Ví dụ:
>> t = Date.today.to_time
=> Wed Apr 18 00:00:00 -0400 2012
>> t.zone
=> "EDT"
>> t = Date.today.to_time(:utc)
=> Wed Apr 18 00:00:00 UTC 2012
>> t.zone
=> "UTC"
Xem nhận xét tôi đã đưa ra về câu trả lời của @ AndrewMarshall về lý do tôi hỏi câu hỏi gốc. Về cơ bản, tôi đang cố gắng tìm ra nếu Date.today trên hệ thống cục bộ sẽ giống như Date.today trên một hệ thống trong UTC. –
Như Andrew nói, Date.today không tạo ra một ngày từ thời gian địa phương không UTC. Để nhận ngày tương ứng với thời gian ở UTC, hãy thử Time.now.utc.to_date –
Tôi chỉ ra rằng trong khi đối với một số quốc gia, bỏ qua múi giờ của ngày có thể hoạt động, tại đây bạn có ngày sai hầu hết các ngày làm việc nếu bạn làm điều đó. (ví dụ: 10 giờ sáng ở địa phương vào ngày 13 tháng 2, tôi nghĩ, 2100 UTC vào ngày 12). – Rich
Bạn có thể lấy đi bằng cách sử dụng
Time.now.utc.to_date
trong ruby
Tốt hơn nhiều so với câu trả lời được chấp nhận. Tôi tự hỏi nếu điều này đã được thêm vào kể từ tháng 4 năm 2012. –
đây là thông tin hữu ích, nhưng nó không trả lời câu hỏi. điều này trả lời cho câu hỏi liên quan "làm thế nào tôi có thể lấy ngày của thời gian UTC hiện tại?", người đăng ký hỏi liệu Date.today có ở UTC hay không, không phải cách lấy ngày tháng bằng utc. –
Nếu ứng dụng ray của bạn được cấu hình để chạy trong múi giờ UTC sau đó chỉ cần sử dụng Time.zone.today
, nếu không, hãy ép buộc bằng cách sử dụng Time.now.utc.to_date
Bạn có thể sử dụng
Date.current
Để có được ngày hiện tại trên múi giờ cấu hình.
- 1. jquery datepicker getTime không phải là UTC
- 2. Tại sao Date.yfter được tính là Date.today?
- 3. Solr không tiết kiệm thời gian ở định dạng UTC
- 4. GMT có giống với UTC không?
- 5. date_default_timezone_set ('UTC') không hoạt động
- 6. Có sự khác biệt giữa múi giờ UTC và Etc/UTC không?
- 7. Nếu một div có "rõ ràng: đúng", không có gì phải trôi nổi ở bên phải của nó, phải không?
- 8. Lưu trữ Utc và giờ địa phương ở Mongo
- 9. Trường dữ liệu có phải ở dạng không?
- 10. Tôi có phải sao chép một khối ở đây không?
- 11. truy vấn trong đó ngày = Date.today có Rails, MySQL và Bản ghi Hoạt động
- 12. Sự khác nhau giữa Date.current và Date.today là gì?
- 13. TênError: tên 'UTC' không được xác định
- 14. timespan và UTC
- 15. pytz utc conversion
- 16. Không thể để định dạng ngày UTC với NSDateFormatter
- 17. Python: Chuyển đổi thời gian UTC thành dấu thời gian UTC
- 18. time_select helper hình thức diễn giải đối tượng thời gian mới như UTC không phải là múi giờ cấu hình
- 19. UTC DATE trong Sequelize.js
- 20. Liên kết hình ảnh UITableViewCell ở bên phải, có thể?
- 21. Mysql FROM_UNIXTIME như UTC
- 22. GMT và UTC ngày
- 23. Hiển thị múi giờ mà không sử dụng UTC
- 24. tạo javascript ngày UTC
- 25. Có bao giờ là lý do chính đáng để lưu trữ thời gian không có trong UTC không?
- 26. nút thông tin rightBarButtonItem, không có khoảng trống ở bên phải
- 27. Bạn có phải thoát khỏi dấu gạch chéo ở phía trước khi sử dụng mod_rewrite không?
- 28. Oracle trimspool chỉ có khoảng trắng ở cuối (không phải khoảng trắng hàng đầu)
- 29. Đó có phải là một thực tiễn Javascript tồi mà tôi đang làm ở đây không?
- 30. Tôi có phải sử dụng glDeleteTextures() ở cuối chương trình không?
Cảm ơn bạn đã làm rõ. Tôi đoán một cách tốt hơn để đặt câu hỏi của tôi sẽ là "kết hợp với múi giờ nào Date.today trở lại ngày hôm sau?" Tôi cho rằng nếu tôi muốn "ngày hôm nay trong UTC", tôi sẽ cần phải làm một cái gì đó như 'Time.now.zone.to_date' (trong Rails). –
'Time.zone.now.to_date' sẽ sử dụng bất kỳ múi giờ nào mà ứng dụng được cấu hình. Đó là giá trị nhìn vào 'Time.use_zone ('[tên khu vực]')' trong trường hợp bạn muốn thiết lập múi giờ cho một khối mã cụ thể, trong trường hợp này là UTC. –
Có với quản lý múi giờ của ActiveSupport, bạn có thể thực hiện 'Time.zone.now.to_date' bằng' Time.current.to_date' bằng 'Date.current'. –