[RUBY] Wie ist der nächste Wert des Time-Objekts korrekt?

Überblick

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.

Umgebung

Ruby: 2.6.2 Rails: 5.1.2

Das Problem, von dem ich in erster Linie abhängig war

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.

Lösungen

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!

Bonus

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

Fazit

Recommended Posts

Wie ist der nächste Wert des Time-Objekts korrekt?
Android-Entwicklung, wie man den Wert des JSON-Objekts auf null überprüft
Wie weit ist die richtige Antwort, um den Prozess zu teilen?
[Java] So erhalten Sie den Maximalwert von HashMap
Die Illusion der Objektorientierung
So ändern Sie den Einstellwert von Springboot Hikari CP
[Swift] Ermittelt das Timing, wenn der Wert von textField geändert wird
Was ist ein unveränderliches Objekt? [Erklärung, wie man macht]
'% 02d' Was ist der% von% 2?
[Schienen] Überprüfen Sie den Inhalt des Objekts
So zeigen Sie 0 auf der linken Seite des Standardeingabewerts an
Das Designkonzept der Datums- und Uhrzeit-API von Java ist interessant
So geben Sie den Wert aus, wenn sich ein Array im Array befindet
So erhöhen Sie den Wert von Map in einer Zeile in Java
Der Inhalt des Rückgabewerts von executeBatch unterscheidet sich zwischen 11g und 12c
So ändern Sie den Wert einer Variablen an einem Haltepunkt in IntelliJ
So implementieren Sie die E-Mail-Authentifizierungsfunktion zum Zeitpunkt der Benutzerregistrierung
[Rails] So lösen Sie die Zeitverzögerung von created_at nach der Speichermethode
Informationen zur Funktionsweise von next () und nextLine ()
So bestimmen Sie die Anzahl der Parallelen
[Java] So stellen Sie die Datums- und Uhrzeit auf 00:00:00 ein
Wie ist die Datenstruktur von ActionText?
Korrigieren Sie die Stoppposition vonoothScrollToPosition von RecyclerView
So übergeben Sie den Wert an einen anderen Bildschirm
[Ruby on Rails] So japanisieren Sie die Fehlermeldung des Formularobjekts (ActiveModel)
Was ist JSP? ~ Lassen Sie uns die Grundlagen von JSP kennen !! ~
Überprüfen Sie den Inhalt des Argumentobjekts mit Mockito
Der ActiveSupport-Unterstrich ist nicht die inverse Konvertierung von camelize
Passen Sie an, wie der Inhalt von Recyclerview aufgeteilt wird
Die Reihenfolge der Java-Methodenmodifikatoren ist festgelegt
Stellen Sie die Zeit von LocalDateTime auf eine bestimmte Zeit ein
Spüren Sie den Lauf der Zeit auch in Java
Wie komme ich zum heutigen Tag?
Ausgabe der Verwendung der Slice-Methode
Informationen zu next () und nextLine () der Scannerklasse
Wie Microservices die Art und Weise der Anwendungsentwicklung verändern
So zeigen Sie das Ergebnis des Ausfüllens des Formulars an
Das Datum und die Uhrzeit von java8 wurden aktualisiert
Geben Sie den Standardwert mit @Builder of Lombok an
Der offizielle Name von Spring MVC ist Spring Web MVC
So ermitteln Sie den Gesamtwert, den Durchschnittswert usw. eines zweidimensionalen Arrays (mehrdimensionales Array) -java
[Vergleichsüberprüfung] Wie unterschiedlich ist die Entwicklungsproduktivität der Spring Boot-App von der Vergangenheit?
Verwendung von UsageStatsManager in Android Studio (Überprüfen der Startzeit anderer Apps)