Quand j'ai écrit l'arrière-plan, c'est devenu un poème, alors j'écrirai d'abord la conclusion.
environnement Rails 5.2.4.2 Ruby 2.6.6
--Si vous spécifiez une date avec DateTime, l'instance devient une classe Date. --La classe Date n'a pas d'informations sur le fuseau horaire, elle devient donc +0000. --La classe Date a un fuseau horaire lorsqu'elle devient la classe DateTime / Time.
Les choses se sont passées vers minuit. Lorsque j'exécute RSpec, certaines choses n'ont rien à voir avec l'implémentation.
Après enquête, il semble que l'endroit où je dois vraiment retourner ne revienne pas. Le comportement que je veux que vous fassiez est de "revenir lorsque la date et l'heure du dernier tweet sont postérieures à hier".
return if last_tweet.tweeted_at > DateTime.yesterday
Alors j'ai cherché.
[2] pry(#<RegisteredTag>)> DateTime.yesterday
=> Thu, 21 May 2020
Ouais, c'est vrai.
[3] pry(#<RegisteredTag>)> DateTime.yesterday.to_time
=> 2020-05-21 00:00:00 +0900
Ça va.
[4] pry(#<RegisteredTag>)> last_tweet.tweeted_at.to_time
=> 2020-05-21 00:30:02 +0900
C'est vrai, comparons.
[6] pry(#<RegisteredTag>)> last_tweet.tweeted_at > DateTime.yesterday.to_time
=> true
Si vous le comparez, cela devrait l'être. Revenons maintenant au code d'origine.
[5] pry(#<RegisteredTag>)> last_tweet.tweeted_at > DateTime.yesterday
=> false
Fafafa? ?? ?? ??
Alors, revérifions.
[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 heures <DateHeure.hier <9 heures Il semble donc que le fuseau horaire ne soit pas appliqué à "DateTime.yesterday".
[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
Il se comporte de la même manière que DateTime.
[31] pry(main)> Date.yesterday.class
=> Date
[32] pry(main)> DateTime.yesterday.class
=> Date
Oh, même si vous le faites avec DateTime, la classe de l'instance sera Date. Ainsi, «Date.yesterday» et «DateTime.yesterday» semblent être la même chose.
Recommended Posts