[RUBY] [Rails] Précautions lors de la comparaison de la date et de l'heure avec DateTime

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

Conclusion

--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.

poème

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é.

déboguer

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

Comparaison des dates

[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".

Je l'ai aussi essayé le Date.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.

Jetez un œil à la classe

[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

[Rails] Précautions lors de la comparaison de la date et de l'heure avec DateTime
Date et l'heure
[Java] Précautions lors de la comparaison de chaînes de caractères avec des chaînes de caractères
Changer la date et l'heure en notation japonaise dans Rails
[Rails] Validez l'heure de début (type datetime) et l'heure de fin
Réglez la date et l'heure à partir de la chaîne de caractères avec POI
Exemple de code pour analyser la date et l'heure avec SimpleDateFormat de Java
[Rails] Enregistrer l'heure de début et l'heure de fin
Précautions lors du remplacement des guillemets par gsub
[Ruby] Informations de base sur les classes Date, Heure et DateHeure
Précautions lors de la création de PostgreSQL avec docker-compose
[MySQL] [java] Date et heure de réception
[Attention !!] Précautions lors de la conversion de la devise Rails et de l'affichage des fichiers en haml
Quelle classe doit être utilisée pour obtenir la date et l'heure dans l'application Rails (Time, DateTime, TimeWithZone)
Une collection de méthodes souvent utilisées lors de la manipulation du temps avec TimeWithZone of Rails
Construction de Rails 6 et environnement PostgreSQL avec Docker
Explication des objets Ruby Time et Date
[Rails] [Note] Quand ajouter = à <%%> et quand pas
[API JSR-310 Date et heure] Précautions pour la définition du format lors de la conversion d'une chaîne de caractères de calendrier japonais en type de date
Mettre en forme la date et l'heure données par created_at
[Rails] Résolution d'erreur lors de la génération de jetons avec PAYJP
Méthode d'acquisition de la date et de l'heure à l'aide de l'API DateAndTime
Comment créer une API avec GraphQL et Rails