Was ist der Unterschied zwischen TemporalAmount oder TemporalUnit in Java 8?

8

Ich schreibe ein Stück Code in Java 8, das die Zeitarithmetik verwendet. Mir ist klar, dass ich das in verschiedenen Richtungen implementieren kann. Schauen wir uns den einfachen Code unten an. Natürlich ist es das gleiche Ergebnis, aber ich habe verwechselt, welcher Weg am häufigsten oder am effizientesten ist, arithmetische Operationen in Java 8 durchzuführen.

%Vor%

Vielen Dank im Voraus.

    
Ugur Artun 10.03.2015, 11:56
quelle

2 Antworten

12

Duration kann nur Zeiträume mit fester Länge wie "Stunden", "Minuten", "Sekunden", "Tage" (wobei genau 24 Stunden pro Tag angenommen werden) verarbeiten. Sie können "Monate" nicht mit Duration verwenden, da sich ein Monat in der Länge unterscheidet.

Period - die andere allgemeine TemporalAmount Implementierung - stellt Jahre, Monate und Tage getrennt dar.

Ich persönlich würde empfehlen:

  • Wenn Sie die Einheit zuvor kennen, verwenden Sie die entsprechende Methode plusXxx , z. %Code%. Das ist ungefähr so ​​einfach zu lesen wie es geht.
  • Wenn Sie versuchen, "logische" Kalenderbeträge darzustellen, verwenden Sie time.plusMinutes(10) .
  • Wenn Sie versuchen, Beträge mit "fester Länge" darzustellen, verwenden Sie Period .

Hier ist ein Beispiel, wo sich Duration und Period unterscheiden können:

%Vor%

Ich mache mir keine Gedanken über die Effizienz, bis Sie wirklich brauchen - an welchem ​​Punkt sollten Sie einen Benchmark haben, damit Sie verschiedene Optionen testen können.

    
Jon Skeet 10.03.2015, 12:05
quelle
3

Wenn Sie sich die Quelle ansehen, verwendet die Methode plus(long amountToAdd, TemporalUnit unit) die Methoden plusXXX , um die Ergebnisse zu erzeugen. Es gibt also keine Argumente für Effizienz.

Stattdessen verwenden Sie das für Ihr Szenario am besten geeignete Szenario. Ich würde vorschlagen, dass, wenn Sie Benutzereingaben verwenden, um zu entscheiden, ob Stunden, Minuten usw. hinzugefügt werden sollen, die Methode plus() besser ist. Andernfalls ist Ihr Code möglicherweise leichter zu lesen, wenn Sie plusXXX verwenden.

    
Duncan Jones 10.03.2015 12:03
quelle

Tags und Links