Als ich den Hintergrund schrieb, wurde es ein Gedicht, also werde ich zuerst die Schlussfolgerung schreiben.
Umgebung Rails 5.2.4.2 Ruby 2.6.6
ActiveSupport :: TimeWithZone
-Klasse in Rails) vergleichen, müssen Sie die Date-Klasse in die DateTime-Klasse konvertieren.Die Dinge passierten gegen Mitternacht. Wenn ich RSpec ausführe, gibt es einige Dinge, die nichts mit der Implementierung zu tun haben.
Nach der Untersuchung scheint der Ort, an dem ich wirklich zurückkehren muss, nicht zurückzukehren. Ich möchte, dass Sie "zurückkehren, wenn Datum und Uhrzeit des letzten Tweets später als gestern sind".
return if last_tweet.tweeted_at > DateTime.yesterday
Also habe ich nachgeschlagen.
[2] pry(#<RegisteredTag>)> DateTime.yesterday
=> Thu, 21 May 2020
Ja, es ist richtig.
[3] pry(#<RegisteredTag>)> DateTime.yesterday.to_time
=> 2020-05-21 00:00:00 +0900
Es ist in Ordnung.
[4] pry(#<RegisteredTag>)> last_tweet.tweeted_at.to_time
=> 2020-05-21 00:30:02 +0900
Das stimmt, vergleichen wir.
[6] pry(#<RegisteredTag>)> last_tweet.tweeted_at > DateTime.yesterday.to_time
=> true
Wenn Sie es vergleichen, sollte es sein. Kehren wir nun zum ursprünglichen Code zurück.
[5] pry(#<RegisteredTag>)> last_tweet.tweeted_at > DateTime.yesterday
=> false
Fafafa? ?? ?? ??
Lassen Sie es uns noch einmal überprüfen.
[33] pry(main)> DateTime.yesterday
=> Thu, 21 May 2020
[34] pry(main)> after_9
=> Thu, 21 May 2020 09:21:38 +0900
[35] pry(main)> DateTime.yesterday < after_9
=> true
[37] pry(main)> before_9
=> Thu, 21 May 2020 08:31:48 +0900
[38] pry(main)> DateTime.yesterday < before_9
=> false
8 Uhr <DateTime.yesterday <9 Uhr Es scheint also, dass die Zeitzone nicht auf "DateTime.yesterday" angewendet wird.
[22] pry(main)> Date.yesterday
=> Thu, 21 May 2020
[23] pry(main)> Date.yesterday < before_9
=> false
[24] pry(main)> Date.yesterday < after_9
=> true
Es verhält sich genauso wie DateTime.
[31] pry(main)> Date.yesterday.class
=> Date
[32] pry(main)> DateTime.yesterday.class
=> Date
Oh, selbst wenn Sie es mit DateTime schaffen, ist die Klasse der Instanz Date. "Date.yesterday" und "DateTime.yesterday" scheinen also dasselbe zu sein.