tl; dr
LocalDateTime.parse(
"2016-01-23 12:34".replace( " " , "T" )
)
.atZone( ZoneId.of( "Asia/Karachi" ) )
.plusMinutes( 10 )
java.time
Verwenden Sie die hervorragenden Klassen java.time für die Arbeit mit Datum und Uhrzeit. Diese Klassen ersetzen die problematischen alten Datums- / Uhrzeitklassen wie java.util.Date
und java.util.Calendar
.
ISO 8601
Die java.time-Klassen verwenden standardmäßig die Standardformate ISO 8601 zum Parsen / Generieren von Zeichenfolgen mit Datums- und Uhrzeitwerten . Ersetzen Sie das Leerzeichen in der Mitte durch a, damit Ihre Eingabezeichenfolge übereinstimmt T
.
String input = "2016-01-23 12:34" ;
String inputModified = input.replace( " " , "T" );
LocalDateTime
Analysieren Sie Ihre Eingabezeichenfolge als, LocalDateTime
da keine Informationen zur Zeitzone oder zum Versatz von UTC vorliegen.
LocalDateTime ldt = LocalDateTime.parse( inputModified );
Fügen Sie zehn Minuten hinzu.
LocalDateTime ldtLater = ldt.plusMinutes( 10 );
ldt.toString (): 2016-01-23T12: 34
ldtLater.toString (): 2016-01-23T12: 44
Siehe Live-Code in IdeOne.com .
Das LocalDateTime
hat keine Zeitzone, so dass es nicht einen Punkt auf der Zeitleiste darstellen. Wenden Sie eine Zeitzone an, um sie in einen tatsächlichen Moment zu übersetzen. Geben Sie einen richtigen Zeitzonennamen im Format continent/region
, wie zum Beispiel America/Montreal
, Africa/Casablanca
oder Pacific/Auckland
, oder Asia/Karachi
. Verwenden Sie niemals die Abkürzung für 3-4 Buchstaben wie EST
oder IST
oder, PKT
da es sich nicht um echte Zeitzonen handelt, die nicht standardisiert und nicht einmal eindeutig (!) Sind.
ZonedDateTime
Wenn Sie die beabsichtigte Zeitzone für diesen Wert kennen, wenden Sie a ZoneId
an , um a zu erhalten ZonedDateTime
.
ZoneId z = ZoneId.of( "Asia/Karachi" );
ZonedDateTime zdt = ldt.atZone( z );
zdt.toString (): 2016-01-23T12: 44 + 05: 00 [Asia / Karachi]
Anomalien
Überlegen Sie, ob Sie diese zehn Minuten vor oder nach dem Hinzufügen einer Zeitzone hinzufügen möchten. Sie können ein ganz anderes Ergebnis wegen Anomalien wie Sommerzeit (DST) erhalten, die die Verschiebung der Wand Uhr Zeit .
Ob Sie die 10 Minuten vor oder nach dem Hinzufügen der Zone hinzufügen sollten, hängt von der Bedeutung Ihres Geschäftsszenarios und Ihrer Regeln ab.
Tipp: Wenn Sie einen bestimmten Moment auf der Zeitachse beabsichtigen, behalten Sie immer die Zeitzoneninformationen bei . Verlieren Sie diese Informationen nicht wie bei Ihren Eingabedaten. Soll der Wert 12:34
in Pakistan Mittag oder in Frankreich Mittag oder in Québec Mittag sein? Wenn Sie in Pakistan Mittag gemeint haben, geben Sie mindestens den Versatz von UTC ( +05:00
) und noch besser den Namen der Zeitzone ( Asia/Karachi
) an.
Instant
Wenn Sie den gleichen Moment wie durch die Linse von UTC sehen möchten , extrahieren Sie einen Instant
. Die Instant
Klasse repräsentiert einen Moment auf der Zeitachse in UTC mit einer Auflösung von Nanosekunden (bis zu neun (9) Stellen eines Dezimalbruchs).
Instant instant = zdt.toInstant();
Konvertieren
Vermeiden Sie nach Möglichkeit die lästigen alten Datums- und Uhrzeitklassen. Aber wenn Sie müssen, können Sie konvertieren. Rufen Sie neue Methoden auf, die den alten Klassen hinzugefügt wurden.
java.util.Date utilDate = java.util.Date.from( instant );
Über java.time
Das java.time- Framework ist in Java 8 und höher integriert. Diese Klassen verdrängen die lästigen alten Legacy - Datum-Zeit - Klassen wie java.util.Date
, Calendar
, & SimpleDateFormat
.
Das Joda-Time- Projekt, das sich jetzt im Wartungsmodus befindet , empfiehlt die Migration zu java.time.
Weitere Informationen finden Sie im Oracle-Lernprogramm . Suchen Sie im Stapelüberlauf nach vielen Beispielen und Erklärungen. Die Spezifikation ist JSR 310 .
Woher bekomme ich die java.time-Klassen?
- Java SE 8 und SE 9 und höher
- Eingebaut.
- Teil der Standard-Java-API mit einer gebündelten Implementierung.
- Java 9 fügt einige kleinere Funktionen und Korrekturen hinzu.
- Java SE 6 und SE 7
- Android
Das ThreeTen-Extra- Projekt erweitert java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Ergänzungen von java.time. Sie können einige nützliche Klassen hier wie finden Interval
, YearWeek
, YearQuarter
, und mehr .