Ich habe dieses Datumsobjekt:
SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd HH:mm");
Date d1 = df.parse(interviewList.get(37).getTime());
Wert von d1 ist Fri Jan 07 17:40:00 PKT 2011
Jetzt versuche ich, dem obigen Datum 10 Minuten hinzuzufügen.
Calendar cal = Calendar.getInstance();
cal.setTime(d1);
cal.add(Calendar.MINUTE, 10);
String newTime = df.format(cal.getTime());
Wert der newTime
Änderungen an, 2011-50-07 17:50
aber es sollte sein 07-01-2011 17:50
.
Es fügt Minuten korrekt hinzu, ändert aber auch den Monat, weiß nicht warum!
java
date
calendar
simpledateformat
java.util.date
junaidp
quelle
quelle
Antworten:
Das Problem für Sie ist, dass Sie verwenden
mm
. Sie sollten verwendenMM
.MM
ist für Monat undmm
ist für Minuten. Versuche es mityyyy-MM-dd HH:mm
Anderer Ansatz:
Es kann so einfach sein (andere Option ist die Verwendung von Joda-Zeit )
quelle
Sie können die DateUtils-Klasse im Paket org.apache.commons.lang3.time verwenden
quelle
org.apache.commons.lang.time.DateUtils
Praktische Methode zur Implementierung der Antwort von @ Pangaea:
quelle
Um Abhängigkeiten zu vermeiden, können Sie java.util.Calendar wie folgt verwenden:
In Java 8 haben wir eine neue API:
quelle
Dies ist falsch angegeben:
Sie verwenden Minuten anstelle von Monat (MM)
quelle
tl; dr
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
undjava.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
.LocalDateTime
Analysieren Sie Ihre Eingabezeichenfolge als,
LocalDateTime
da keine Informationen zur Zeitzone oder zum Versatz von UTC vorliegen.Fügen Sie zehn Minuten hinzu.
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 Formatcontinent/region
, wie zum BeispielAmerica/Montreal
,Africa/Casablanca
oderPacific/Auckland
, oderAsia/Karachi
. Verwenden Sie niemals die Abkürzung für 3-4 Buchstaben wieEST
oderIST
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 erhaltenZonedDateTime
.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
. DieInstant
Klasse repräsentiert einen Moment auf der Zeitachse in UTC mit einer Auflösung von Nanosekunden (bis zu neun (9) Stellen eines Dezimalbruchs).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.
Ü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?
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 .quelle
Das Muster Ihres SimpleDateFormat weist einen Fehler auf. es sollte sein
quelle
benutze dieses Format,
mm für Minuten und MM für Monate
quelle
Sobald Sie Ihr Datum analysiert haben, verwende ich diese Dienstprogrammfunktion, um Stunden, Minuten oder Sekunden hinzuzufügen:
Seien Sie vorsichtig, wenn Sie längere Zeiträume hinzufügen. 1 Tag ist nicht immer 24 Stunden (Anpassungen der Sommerzeit, Schaltsekunden usw.)
Calendar
wird dafür empfohlen.quelle
Arbeite für mich DateUtils
...
quelle
Kann ohne die Konstanten durchgeführt werden (wie 3600000 ms ist 1h)
Anwendungsbeispiel:
quelle
Nur für alle, die interessiert sind. Ich arbeitete an einem iOS-Projekt, für das ähnliche Funktionen erforderlich waren, und beendete die Portierung der Antwort von @jeznag auf schnell
quelle