Beim Umgang mit Zeitobjekten in Ruby stoße ich auf ein Grenzproblem. Wenn Sie es normal machen, wird es kein Problem sein, das Range-Objekt zu verwenden, aber ich bin auf ungewöhnliche Weise darauf gestoßen.
Ruby: 2.6.2 Rails: 5.1.2
Time.now.end_of_day
=> 2020-05-15 23:59:59 +0900
Ich möchte den nächsten Wert davon nehmen.
Dies war das erste, was mir einfiel
Time.now.end_of_day + 1
=> 2020-05-16 00:00:00 +0900
Dies ist jedoch ein Fehler
(Time.now.end_of_day + 1).iso8601(3)
=> "2020-05-16T00:00:00.999+09:00"
+ 1
kann nicht verwendet werden, da es 1 Sekunde hinzufügt, bis Sie es satt haben und nicht zum nächsten Wert wechseln.
Als ich in der Zeitklasse fischte, fand ich eine Methode, die so aussah. 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
Es scheint jedoch, dass er genau das Gleiche tut wie "+ 1", weil er wütend ist, wenn er es benutzt, weil es veraltet ist. Nicht gut.
Immerhin wusste ich nicht, wie es geht, also habe ich es geschoben
Im Fall des Beispielproblems sehe ich nur eine kleine Anzahl von 9 Ziffern
(Time.now.end_of_day + 1).iso8601(10)
=> "2020-05-16T00:00:00.9999999990+09:00"
Mit anderen Worten, addieren Sie 1 Nanosekunde.
(Time.now.end_of_day + 1/1000000000.0).iso8601(9)
=> "2020-05-16T00:00:00.000000000+09:00"
erledigt!
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"
War nicht gut
Recommended Posts