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, das obige Datum um 10 Minuten zu verlängern.
Calendar cal = Calendar.getInstance();
cal.setTime(d1);
cal.add(Calendar.MINUTE, 10);
String newTime = df.format(cal.getTime());
Wert von 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!
Das Problem für Sie ist, dass Sie verwenden mm
. Du solltest benutzen MM
. MM
ist für Monat und mm
ist minutenlang. Versuche es mit yyyy-MM-dd HH:mm
Anderer Ansatz:
Es kann so einfach sein (eine andere Option ist die Verwendung von Joda-Zeit)
static final long ONE_MINUTE_IN_MILLIS=60000;//millisecs
Calendar date = Calendar.getInstance();
long t= date.getTimeInMillis();
Date afterAddingTenMins=new Date(t + (10 * ONE_MINUTE_IN_MILLIS));
Sie können die Klasse DateUtils im Paket org.apache.commons.lang3.time verwenden
int addMinuteTime = 5;
Date targetTime = new Date(); //now
targetTime = DateUtils.addMinutes(targetTime, addMinuteTime); //add minute
Komfortmethode zum Implementieren der Antwort von @Pangea:
/*
* Convenience method to add a specified number of minutes to a Date object
* From: http://stackoverflow.com/questions/9043981/how-to-add-minutes-to-my-date
* @param minutes The number of minutes to add
* @param beforeTime The time that will have minutes added to it
* @return A date object with the specified number of minutes added to it
*/
private static Date addMinutesToDate(int minutes, Date beforeTime){
final long ONE_MINUTE_IN_MILLIS = 60000;//millisecs
long curTimeInMs = beforeTime.getTime();
Date afterAddingMins = new Date(curTimeInMs + (minutes * ONE_MINUTE_IN_MILLIS));
return afterAddingMins;
}
Um Abhängigkeiten zu vermeiden, können Sie java.util.Calendar wie folgt verwenden:
Calendar now = Calendar.getInstance();
now.add(Calendar.MINUTE, 10);
Date teenMinutesFromNow = now.getTime();
In Java 8 haben wir eine neue API:
LocalDateTime dateTime = LocalDateTime.now().plus(Duration.of(10, ChronoUnit.MINUTES));
Date tmfn = Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant());
Das ist falsch angegeben:
SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd HH:mm");
Sie verwenden Minuten statt Monate (MM)
tl;dr
LocalDateTime.parse(
"2016-01-23 12:34".replace( " " , "T" )
)
.atZone( ZoneId.of( "Asia/Karachi" ) )
.plusMinutes( 10 )
java.time
Verwenden Sie die hervorragenden java.time-Klassen für Datums- und Zeitangaben. Diese Klassen ersetzen die lästigen alten Datums-Zeit-Klassen wie z java.util.Date
und java.util.Calendar
.
ISO 8601
Die java.time-Klassen verwenden standard ISO 8601 formatiert standardmäßig zum Analysieren/Generieren von Zeichenfolgen mit Datums- und Uhrzeitwerten. Damit Ihre Eingabezeichenfolge übereinstimmt, ersetzen Sie das LEERZEICHEN in der Mitte durch a T
.
String input = "2016-01-23 12:34" ;
String inputModified = input.replace( " " , "T" );
LocalDateTime
Analysieren Sie Ihre Eingabezeichenfolge als a LocalDateTime
da es keine Informationen über die Zeitzone oder den Offset von UTC gibt.
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
Sehen Live-Code in IdeOne.com.
Dass LocalDateTime
hat keine Zeitzone, also tut es nicht stellen einen Punkt auf der Zeitachse dar. Wenden Sie eine Zeitzone an, um sie in einen tatsächlichen Moment zu übersetzen. Geben Sie a an richtiger Zeitzonenname im Format von continent/region
wie zum Beispiel America/Montreal
, Africa/Casablanca
oder Pacific/Auckland
oder Asia/Karachi
. Verwenden Sie niemals die 3-4-Buchstaben-Abkürzung wie z EST
oder IST
oder PKT
so wie sie sind nicht echte Zeitzonen, nicht standardisiert und nicht einmal eindeutig (!).
ZonedDateTime
Wenn Sie die beabsichtigte Zeitzone für diesen Wert kennen, wenden Sie a an ZoneId
ein bekommen 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. Aufgrund von Anomalien wie der Sommerzeit (DST), die die Uhrzeit verschieben, erhalten Sie möglicherweise ein ganz anderes Ergebnis Wandzeit.
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 Zeitleiste beabsichtigen, Bewahren Sie immer die Zeitzoneninformationen auf. Verlieren Sie diese Informationen nicht, wie es bei Ihren Eingabedaten der Fall ist. Ist der Wert 12:34
Soll Mittag in Pakistan oder Mittag in Frankreich oder Mittag in Québec sein? Wenn Sie Mittag in Pakistan meinten, sagen Sie dies, indem Sie mindestens den Versatz von UTC (+05:00
) und noch besser der Name der Zeitzone (Asia/Karachi
).
Instant
Wenn Sie den gleichen Moment wie durch die Linse sehen möchten koordinierte Weltzeitextrahiere ein Instant
. Das Instant
Klasse repräsentiert einen Moment auf der Zeitachse in koordinierte Weltzeit 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-Zeit-Klassen. 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 ersetzen die lästigen alten Erbe Datum-Zeit-Klassen wie z java.util.Date
, Calendar
& SimpleDateFormat
.
Das Joda-Zeit Projekt, jetzt in Wartungsmodusrät zur Migration auf java.time.
Weitere Informationen finden Sie unter Oracle-Tutorial. Und durchsuchen Sie Stack Overflow nach vielen Beispielen und Erklärungen. Spezifikation ist JSR310.
Wo erhalte ich die java.time-Klassen?
- Java SE 8 und SE 9 und später
- 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
- Ein Großteil der java.time-Funktionalität wurde in Java 6 & 7 zurückportiert ThreeTen-Backport.
- Android
- Das ThreeTenABP Projekt passt ThreeTen-Backport (oben erwähnt) speziell für Android.
- Sehen Wie benutzt man….
Das ThreeTen-Extra project erweitert java.time um zusätzliche Klassen. Dieses Projekt ist ein Testfeld für mögliche zukünftige Ergänzungen zu java.time. Sie können hier einige nützliche Klassen finden, wie z Interval
, YearWeek
, YearQuarter
und mehr.
Es gibt einen Fehler im Muster Ihres SimpleDateFormat. es sollte sein
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
mögliches Duplikat von Java , Hinzufügen von Minuten zu einem Date , seltsame Anomalie
– Basilikum Bourque
21. Juni 2014 um 1:33 Uhr
Mögliches Duplikat von Wie addiere ich einen Monat zum aktuellen Datum in Java?
– MadBoomy
30. September 2017 um 20:44 Uhr
Für neue Leser auf die Frage empfehle ich Ihnen, nicht zu verwenden
SimpleDateFormat
,Date
undCalendar
. Diese Klassen sind schlecht gestaltet und seit langem veraltet, wobei die erste besonders notorisch lästig ist. Verwenden Sie stattdessenLocalDateTime
undDateTimeFormatter
beide aus java.time, die moderne Java-API für Datum und Uhrzeit.– Ole VV
18. April 2021 um 7:40 Uhr
Ich stimme den vorgeschlagenen Duplikaten nicht zu. Diese Frage bezieht sich auf SimpleDateFormat, das den Monat beim Analysieren ignoriert, aber kein Duplikat davon. Es kann als Duplikat des viel späteren Bei der Verwendung der Datumsauswahl in Android angesehen werden, muss aber nicht, dass es das falsche Datum auswählt [duplicate].
– Ole VV
18. April 2021 um 7:52 Uhr
idk Wenn Ihnen jemand gesagt hat, dass Sie Minuten und Monate im gleichen Format analysieren, werden Monate mit Großbuchstaben “yyyy-MM-dd” und Minuten mit Kleinbuchstaben “HH: mm: ss” gelesen, da Sie parsen Monat mit Kleinbuchstaben fügt der Kalender Ihre Minuten zu Ihrem Monat hinzu.
– Pedro Joaquin
18. April um 16:37 Uhr