Was ist in Joda-Time 2 der Unterschied zwischen den drei Arten von Zeitspannen:
- Zeitraum
- Intervall
Dauer
Warum brauchen wir drei Klassen?
Welches ist besser?
Warum ist das Teilen einer Perioden-, Dauer- oder Intervallinstanz nicht implementiert? Z.Bp = p.divideBy(2);
Period
. Ein Vorschlag zur Standardisierung einer solchen Terminologie wurde vorgelegt, aber noch nicht umgesetzt.Antworten:
Es werden 3 Klassen benötigt, da sie unterschiedliche Konzepte darstellen. Es geht also eher darum, die für den Job geeignete auszuwählen, als um die relative Leistung. Aus der Dokumentation mit von mir kursiv hinzugefügten Kommentaren :
Ein Intervall in Joda-Zeit repräsentiert ein Zeitintervall von einem Millisekunden-Moment zu einem anderen Moment. Beide Zeitpunkte sind vollständig spezifizierte Zeitpunkte im Datums- / Uhrzeitkontinuum mit Zeitzone. Es werden bestimmte Zeiten definiert, z. B. kann dies das Intervall zwischen 20: 00: 00GMT gestern und 09: 00: 00GMT heute Morgen sein.
Eine Dauer in Joda-Zeit repräsentiert eine in Millisekunden gemessene Zeitdauer. Die Dauer wird oft aus einem Intervall erhalten. dh wir können den Anfang vom Ende eines Intervalls subtrahieren, um eine Dauer abzuleiten
Ein Zeitraum in Joda-Time stellt einen Zeitraum dar, der in Form von Feldern definiert ist, z. B. 3 Jahre 5 Monate 2 Tage und 7 Stunden. Dies unterscheidet sich von einer Dauer dadurch, dass sie in Millisekunden ungenau ist. Ein Zeitraum kann nur auf eine genaue Anzahl von Millisekunden aufgelöst werden, indem der Zeitpunkt (einschließlich Chronologie und Zeitzone) angegeben wird, auf den er sich bezieht. Betrachten Sie beispielsweise den Zeitraum von 1 Jahr. Wenn wir diesen zum 1. Januar hinzufügen, werden wir immer am nächsten 1. Januar ankommen, aber die Dauer hängt davon ab, ob das dazwischenliegende Jahr ein Schaltjahr ist oder nicht. Wenn wir dem 1. eines Monats 1 Monat hinzufügen, erreichen wir den 1. des nächsten Monats, aber die Dauer (in Millisekunden) hängt vom jeweiligen Monat ab
Für Frage 3 ist eine bestimmte Methode zum Teilen einer Dauer nicht wirklich erforderlich, da wir immer die Anzahl der Millisekunden aus der Dauer als
long
(VerwendengetMillis()
) abrufen, sie teilen und eine neue Dauer (Verwendennew Duration(long duration)
) erstellen können .Das Teilen einer Periode hat keine wirkliche Bedeutung, basierend auf der Definition einer Periode oben. zB was ist ein halber Monat? (seine Länge würde von welchem Monat abhängen).
quelle
Um Mikejs Antwort hinzuzufügen :
Eine Joda- Zeitdauer ist ein "physisches" Zeitintervall; z.B:
12000 milliseconds
<- Dies ist eine DauerEin Joda- Zeitintervall besteht eigentlich aus zwei Zeitpunkten (Startzeitpunkt - Endzeitpunkt). Ein Augenblick ist wiederum ein "physisches" Konzept, ein Punkt in der Zeitleiste. ZB (nur eine mögliche Notation):
(2010/3/3 19:00:00.000 UTC ; 2010/3/3 20:00:00.000 UTC)
<- Dies ist ein IntervallEin Intervall kann also in eine Dauer umgewandelt werden , nicht jedoch umgekehrt.
Betrachten Sie diese beiden Intervalle:
I1=(2010/3/3 19:00:00.000 UTC ; 2010/3/3 20:00:00.000 UTC)
I2=(2010/3/3 21:00:00.000 UTC ; 2010/3/3 22:00:00.000 UTC)
Als Intervalle
I1
undI2
sind unterschiedlich, weil die Endpunkte unterschiedlich sind; aber wenn ich sie in Dauern umwandle, bekomme ich das gleiche :3600000 milliseconds
.(Mathematische Analogie: Die Intervalle
[10,12]
und[95,97]
sind unterschiedliche Intervalle , aber sie haben die gleiche Länge : "Intervalllänge" entspricht der Dauer ).Schließlich ist ein Zeitraum ein Zeitraffer der "Zivilzeit", ausgedrückt als Anzahl von Monaten, Tagen, Stunden usw. Er stellt für sich genommen kein "physisches" Intervall dar und kann daher nicht direkt in a umgewandelt werden Dauer (Monate haben unterschiedliche Längen ...).
Dies beantwortet Frage 3: Sie können eine physikalische Zeit (eine Dauer) nur durch zwei teilen.
quelle