[RUBY] Comment la valeur suivante de l'objet Time est-elle correcte?

Aperçu

Lorsque je traite des objets Time dans Ruby, je rencontre un problème de limite. Si vous le faites normalement, ce ne sera pas un problème en utilisant l'objet Range, mais je suis tombé dessus d'une manière inhabituelle.

environnement

Ruby: 2.6.2 Rails: 5.1.2

Le problème auquel j'étais accro en premier lieu

Time.now.end_of_day
=> 2020-05-15 23:59:59 +0900

Je veux prendre la valeur suivante de ceci.

C'était la première chose que j'ai trouvée

Time.now.end_of_day + 1
=> 2020-05-16 00:00:00 +0900

Cependant, c'est une erreur

(Time.now.end_of_day + 1).iso8601(3)
=> "2020-05-16T00:00:00.999+09:00"

+ 1 ne peut pas être utilisé car il ajoute 1 seconde jusqu'à ce que vous en ayez assez et ne passe pas à la valeur suivante.

Quand je pêchais dans la classe Time, j'ai trouvé une méthode qui ressemblait à ça. https://docs.ruby-lang.org/ja/latest/method/Time/i/succ.html

Time.now.end_of_day.succ
(pry):109: warning: Time#succ is obsolete; use time + 1
=> 2020-05-16 00:00:00 +0900

Cependant, il semble qu'il fasse simplement la même chose que «+ 1» parce qu'il est en colère quand il l'utilise parce qu'il est obsolète. Pas bien.

Solution

Après tout, je ne savais pas comment le faire, alors je l'ai poussé

Dans le cas de l'exemple de problème, je ne vois qu'un petit nombre de 9 chiffres

(Time.now.end_of_day + 1).iso8601(10)
=> "2020-05-16T00:00:00.9999999990+09:00"

En d'autres termes, ajoutez 1 nanoseconde.

(Time.now.end_of_day + 1/1000000000.0).iso8601(9)
=> "2020-05-16T00:00:00.000000000+09:00"

l'a fait!

prime

Time.now.iso8601(10)
=> "2020-05-15T19:56:55.4979370000+09:00"

Time.new(2020, 5, 16, 16, 59, 59.3).iso8601(9)
=> "2020-05-16T16:59:59.299999999+09:00"

Time.parse("2020-05-16T16:59:59.3+09:00").iso8601(9)
=> "2020-05-16T16:59:59.300000000+09:00"

Time.parse("2020-05-16T16:59:59.35555555555555555555+09:00").iso8601(20)
=> "2020-05-16T16:59:59.35555555555555555555+09:00"

N'était pas bon

Conclusion

Recommended Posts

Comment la valeur suivante de l'objet Time est-elle correcte?
Développement Android, comment vérifier null dans la valeur de l'objet JSON
Jusqu'où est la bonne réponse pour diviser le processus?
[Java] Comment obtenir la valeur maximale de HashMap
L'illusion de l'orientation objet
Comment modifier la valeur de réglage de Springboot Hikari CP
[Swift] Obtenez le moment où la valeur de textField est modifiée
Qu'est-ce qu'un objet immuable? [Explication comment faire]
'% 02d' Quel est le% de% 2?
[Rails] Vérifiez le contenu de l'objet
Comment afficher 0 sur le côté gauche de la valeur d'entrée standard
Le concept de conception de l'API de date et d'heure de Java est intéressant
Comment afficher la valeur lorsqu'il y a un tableau dans le tableau
Comment incrémenter la valeur de Map sur une ligne en Java
Le contenu de la valeur de retour de executeBatch est différent entre 11g et 12c
Comment changer la valeur d'une variable à un point d'arrêt dans intelliJ
Comment mettre en œuvre la fonction d'authentification du courrier au moment de l'inscription de l'utilisateur
[Rails] Comment résoudre le décalage temporel de created_at après la méthode de sauvegarde
À propos du fonctionnement de next () et nextLine ()
Comment déterminer le nombre de parallèles
[Java] Comment régler la date sur 00:00:00
Quelle est la structure des données d'ActionText?
Corriger la position d'arrêt de smoothScrollToPosition de RecyclerView
Comment passer la valeur à un autre écran
[Ruby on Rails] Comment japonaisiser le message d'erreur de l'objet Form (ActiveModel)
Qu'est-ce que JSP? ~ Connaissons les bases de JSP !! ~
Vérifiez le contenu de l'objet argument avec Mockito
Le trait de soulignement ActiveSupport n'est pas la conversion inverse de camelize
Personnalisez la répartition du contenu de Recyclerview
L'ordre des modificateurs de méthode Java est fixe
Définir l'heure de LocalDateTime à une heure spécifique
Ressentez le passage du temps même à Java
Comment obtenir le jour d'aujourd'hui
Sortie de la façon d'utiliser la méthode slice
À propos de next () et nextLine () de la classe Scanner
Comment les microservices changent la façon de développer des applications
Comment afficher le résultat du remplissage du formulaire
La date et l'heure de java8 ont été mises à jour
Spécifiez la valeur par défaut avec @Builder of Lombok
Le nom officiel de Spring MVC est Spring Web MVC
Comment trouver la valeur totale, la valeur moyenne, etc. d'un tableau à deux dimensions (tableau multidimensionnel) -java
[Vérification de comparaison] Quelle est la différence entre la productivité du développement de l'application Spring Boot et celle du passé?
Comment utiliser UsageStatsManager dans Android Studio (Comment vérifier l'heure de démarrage d'autres applications)