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.
Ruby: 2.6.2 Rails: 5.1.2
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.
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!
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
Recommended Posts