簡體   English   中英

Rails TimeWithZone 不匹配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM