[英]Rails TimeWithZone doesn't match
我一直在度過一段糟糕的時光,有 2 次說它不相等
# returns TRUE before persisted, but when retrieved from postgres it's FALSE
end_date == end_date.in_time_zone('Eastern Time (US & Canada)').end_of_day
您的直接想法可能是usec
但是我已經檢查過很多次了,兩者都是999999
:
[21] pry(#<Lease>)> end_date.usec
=> 999999
[22] pry(#<Lease>)> end_date.in_time_zone('Eastern Time (US & Canada)').end_of_day.usec
=> 999999
[23] pry(#<Lease>)> end_date.to_i
=> 1580533199
[24] pry(#<Lease>)> end_date.in_time_zone('Eastern Time (US & Canada)').end_of_day.to_i
=> 1580533199
[25] pry(#<Lease>)> end_date.class
=> ActiveSupport::TimeWithZone
[26] pry(#<Lease>)> end_date.in_time_zone('Eastern Time (US & Canada)').end_of_day.class
=> ActiveSupport::TimeWithZone
[33] pry(#<Lease>)> end_date.iso8601
=> "2020-02-01T04:59:59Z"
[34] pry(#<Lease>)> end_date.in_time_zone('Eastern Time (US & Canada)').end_of_day.utc.iso8601
=> "2020-02-01T04:59:59Z"
這讓我發瘋,我不知道還有什么要檢查的......
編輯:看來nsec
是不同的。 我該怎么解釋這個? 如何將納秒截斷到特定精度 (6)。 除非當我的時間涉及“月底”(某個學期的結束)時有更好的方法來處理這個問題
當模型保存到數據庫時,這些時間戳存儲在具有微秒分辨率的timestamp without time zone
類型中。 當您的時間達到納秒精度時,它會被截斷。
要修復它,您可以嘗試:
round
到完整微秒來近似日期:1.day.ago.round(6).nsec
#=> 158812000
1.day.ago.round(6)
#=> Wed, 28 Aug 2019 03:21:51 EDT -04:00
我知道這些都不是完美的解決方案,現在想不出更好的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.