Ich arbeite mit einem Datum in diesem Format : yyyy-mm-dd
.
Wie kann ich dieses Datum um einen Tag erhöhen?
Ich arbeite mit einem Datum in diesem Format : yyyy-mm-dd
.
Wie kann ich dieses Datum um einen Tag erhöhen?
Antworten:
So etwas sollte den Trick machen:
String dt = "2008-01-01"; // Start date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
c.setTime(sdf.parse(dt));
c.add(Calendar.DATE, 1); // number of days to add
dt = sdf.format(c.getTime()); // dt is now the new date
add()
wird das Datum rollen. Siehe auf ideone .
Java scheint im Vergleich zu C # weit hinter dem Achtball zu liegen. Diese Dienstprogrammmethode zeigt die Vorgehensweise in Java SE 6 mithilfe der Calendar.add-Methode (vermutlich die einzig einfache Methode).
public class DateUtil
{
public static Date addDays(Date date, int days)
{
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, days); //minus number would decrement the days
return cal.getTime();
}
}
Um einen Tag gemäß der gestellten Frage hinzuzufügen, rufen Sie ihn wie folgt auf:
String sourceDate = "2012-02-29";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date myDate = format.parse(sourceDate);
myDate = DateUtil.addDays(myDate, 1);
java.util.Date
, java.util.Calendar
und java.text.SimpleDateFormat
sind jetzt Erbe , durch die verdrängte java.time Klassen in Java gebaut 8 und höher. Siehe Tutorial von Oracle .
Unter Java 8 und höher macht das Paket java.time dies ziemlich automatisch. ( Tutorial )
Annahme von String
Input und Output:
import java.time.LocalDate;
public class DateIncrementer {
static public String addOneDay(String date) {
return LocalDate.parse(date).plusDays(1).toString();
}
}
ZonedDateDateTime
als OffsetDateTime
auch haben plusDays
und minusDays
Methoden sowieLocalDate
LocalDate
.
Ich bevorzuge DateUtils von Apache. Überprüfen Sie dies unter http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/time/DateUtils.html . Dies ist besonders dann praktisch, wenn Sie es an mehreren Stellen in Ihrem Projekt verwenden müssen und dafür keine Einzeilermethode schreiben möchten.
Die API sagt:
addDays (Datum Datum, int Betrag): Fügt einem Datum, das ein neues Objekt zurückgibt, eine Anzahl von Tagen hinzu.
Beachten Sie, dass ein neues Datumsobjekt zurückgegeben wird und keine Änderungen am vorherigen selbst vorgenommen werden.
Erstellen Sie ein Kalenderobjekt und verwenden Sie die Methode add (Calendar.DATE, 1).
Werfen Sie einen Blick auf Joda-Time ( https://www.joda.org/joda-time/ ).
DateTimeFormatter parser = ISODateTimeFormat.date();
DateTime date = parser.parseDateTime(dateString);
String nextDay = parser.print(date.plusDays(1));
Bitte beachten Sie, dass diese Zeile 24 Stunden hinzufügt:
d1.getTime() + 1 * 24 * 60 * 60 * 1000
aber diese Zeile fügt einen Tag hinzu
cal.add( Calendar.DATE, 1 );
An Tagen mit einer Änderung der Sommerzeit (25 oder 23 Stunden) erhalten Sie unterschiedliche Ergebnisse!
Java 8 hat eine neue API zum Arbeiten mit Datum und Uhrzeit hinzugefügt.
Mit Java 8 können Sie die folgenden Codezeilen verwenden:
// parse date from yyyy-mm-dd pattern
LocalDate januaryFirst = LocalDate.parse("2014-01-01");
// add one day
LocalDate januarySecond = januaryFirst.plusDays(1);
januaryFirst.plusDays(1)
nicht date.plusDays(1)
.
Sie können Simple java.util lib verwenden
Calendar cal = Calendar.getInstance();
cal.setTime(yourDate);
cal.add(Calendar.DATE, 1);
yourDate = cal.getTime();
java.util.Date
, java.util.Calendar
und java.text.SimpleDateFormat
sind jetzt Erbe , durch die verdrängte java.time Klassen in Java gebaut 8 und höher. Siehe Tutorial von Oracle .
Date today = new Date();
SimpleDateFormat formattedDate = new SimpleDateFormat("yyyyMMdd");
Calendar c = Calendar.getInstance();
c.add(Calendar.DATE, 1); // number of days to add
String tomorrow = (String)(formattedDate.format(c.getTime()));
System.out.println("Tomorrows date is " + tomorrow);
Dies wird das Datum von morgen geben. c.add(...)
Die Parameter können für ein entsprechendes Inkrement von 1 auf eine andere Zahl geändert werden.
Date
oder Calendar
wieder zu verwenden.
Wenn Sie Java 8 verwenden , gehen Sie folgendermaßen vor.
LocalDate sourceDate = LocalDate.of(2017, Month.MAY, 27); // Source Date
LocalDate destDate = sourceDate.plusDays(1); // Adding a day to source date.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // Setting date format
String destDate = destDate.format(formatter)); // End date
Wenn Sie SimpleDateFormat verwenden möchten , gehen Sie folgendermaßen vor.
String sourceDate = "2017-05-27"; // Start date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.setTime(sdf.parse(sourceDate)); // parsed date and setting to calendar
calendar.add(Calendar.DATE, 1); // number of days to add
String destDate = sdf.format(calendar.getTime()); // End date
LocalDate
Klasse nicht LocalDateTime
.
long timeadj = 24*60*60*1000;
Date newDate = new Date (oldDate.getTime ()+timeadj);
Dies nimmt die Anzahl der Millisekunden seit der Epoche von oldDate an und fügt Millisekunden im Wert von 1 Tag hinzu. Anschließend wird mit dem öffentlichen Konstruktor Date () ein Datum mit dem neuen Wert erstellt. Mit dieser Methode können Sie 1 Tag oder eine beliebige Anzahl von Stunden / Minuten hinzufügen, nicht nur ganze Tage.
Seit Java 1.5 sieht TimeUnit.DAYS.toMillis (1) für mich sauberer aus.
SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
Date day = dateFormat.parse(string);
// add the day
Date dayAfter = new Date(day.getTime() + TimeUnit.DAYS.toMillis(1));
LocalDate
Klasse in den java.time-Klassen für Java 8 und höher und der Back-Port zu Java 6 und Java 7 im ThreeTen-Backport- Projekt ist.
In Java 8 ist dies auf einfache Weise möglich:
Date.from(Instant.now().plusSeconds(SECONDS_PER_DAY))
Instant.now().plus( 1 , ChronoUnit.DAYS )
?
In Java 8 können Sie verwenden java.time.LocalDate
LocalDate parsedDate = LocalDate.parse("2015-10-30"); //Parse date from String
LocalDate addedDate = parsedDate.plusDays(1); //Add one to the day field
Sie können java.util.Date
wie folgt in ein Objekt konvertieren .
Date date = Date.from(addedDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
Sie können LocalDate
wie folgt zu einem String formatieren.
String str = addedDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
Es ist sehr einfach, es mit einem einfachen Wort zu erklären. Holen Sie sich das heutige Datum wie unten
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());// print today's date
calendar.add(Calendar.DATE, 1);
Stellen Sie nun mit der Methode calendar.add, die (Konstante, Wert) verwendet, einen Tag im Voraus auf dieses Datum ein. Hier könnte die Konstante DATE, Stunden, Min, Sek. Usw. sein und der Wert ist der Wert der Konstante. Wie für einen Tag ist die Vorauskonstante Calendar.DATE und ihr Wert ist 1, da wir einen Wert für einen Tag im Voraus wünschen.
System.out.println(calendar.getTime());// print modified date which is
das Datum von morgen
Vielen Dank
Apache Commons hat bereits diese DateUtils.addDays (Datumsdatum, int Betrag) http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/time/DateUtils.html#addDays%28java .util.Date,% 20int% 29, das Sie verwenden, oder Sie könnten mit dem JodaTime arbeiten, um es sauberer zu machen.
Geben Sie einfach das Datum in String und die Anzahl der nächsten Tage ein
private String getNextDate(String givenDate,int noOfDays) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
String nextDaysDate = null;
try {
cal.setTime(dateFormat.parse(givenDate));
cal.add(Calendar.DATE, noOfDays);
nextDaysDate = dateFormat.format(cal.getTime());
} catch (ParseException ex) {
Logger.getLogger(GR_TravelRepublic.class.getName()).log(Level.SEVERE, null, ex);
}finally{
dateFormat = null;
cal = null;
}
return nextDaysDate;
}
Wenn Sie eine einzelne Zeiteinheit hinzufügen möchten und erwarten, dass auch andere Felder inkrementiert werden, können Sie die Methode add sicher verwenden. Siehe Beispiel unten:
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.set(1970,Calendar.DECEMBER,31);
System.out.println(simpleDateFormat1.format(cal.getTime()));
cal.add(Calendar.DATE, 1);
System.out.println(simpleDateFormat1.format(cal.getTime()));
cal.add(Calendar.DATE, -1);
System.out.println(simpleDateFormat1.format(cal.getTime()));
Wird drucken:
1970-12-31
1971-01-01
1970-12-31
startCalendar.add(Calendar.DATE, 1); //Add 1 Day to the current Calender
Calendar
Klasse im Jahr 2019 verwenden.
Wenn Sie Java SE 8 oder höher verwenden, sollten Sie die neue Datums- / Uhrzeit-API verwenden
int days = 7;
LocalDate dateRedeemed = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/YYYY");
String newDate = dateRedeemed.plusDays(days).format(formatter);
System.out.println(newDate);
Wenn Sie von java.util.Date
nach konvertieren müssen, java.time.LocalDate
können Sie diese Methode verwenden.
public LocalDate asLocalDate(Date date) {
Instant instant = date.toInstant();
ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault());
return zdt.toLocalDate();
}
Wenn Sie eine Version vor Java SE 8 verwenden, empfehle ich Ihnen, diese zu verwenden Joda-Time zu verwenden
Joda-Time bietet einen Qualitätsersatz für die Java-Datums- und Zeitklassen und ist de facto die Standard-Datums- und Zeitbibliothek für Java vor Java SE 8
int days = 7;
DateTime dateRedeemed = DateTime.now();
DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/uuuu");
String newDate = dateRedeemed.plusDays(days).toString(formatter);
System.out.println(newDate);
java.time
Teil ist falsch. Es sollte dd/MM/uuuu
dem JodaTime entsprechen.
Verwenden Sie die DateFormat
API, um den String in ein Date-Objekt zu konvertieren, und verwenden Sie dann die Calendar
API, um einen Tag hinzuzufügen. Lassen Sie mich wissen, wenn Sie bestimmte Codebeispiele wünschen, und ich kann meine Antwort aktualisieren.
Wenn Sie Java 8 verwenden java.time.LocalDate
und java.time.format.DateTimeFormatter
dies ganz einfach machen können.
public String nextDate(String date){
LocalDate parsedDate = LocalDate.parse(date);
LocalDate addedDate = parsedDate.plusDays(1);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-mm-dd");
return addedDate.format(formatter);
}
toString()
, um die Zeichenfolge im Format JJJJ-MM-TT zu erstellen (und wenn Sie darauf bestehen, denken Sie daran, dass dies mm
Minuten sind, während MM
der Monat ist).
Sie können dieses Paket unter "org.apache.commons.lang3.time" verwenden:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date myNewDate = DateUtils.addDays(myDate, 4);
Date yesterday = DateUtils.addDays(myDate, -1);
String formatedDate = sdf.format(myNewDate);
Date
Unterrichts im Jahr 2018 ist ein schlechter Rat. Die lästigen alten Datum Zeitklassen wie java.util.Date
, java.util.Calendar
und java.text.SimpleDateFormat
sind jetzt Erbe , durch die verdrängte java.time Klassen in Java gebaut 8 & Java 9. Siehe Tutorial von Oracle . Siehe andere Antworten mit LocalDate
Klasse.
SimpleDateFormat
Klasse fügt leider eine Zeitzone ein und wendet implizit die aktuelle Standardzone der JVM an. So sind die Ergebnisse dieser Code von was auch immer die aktuellen Standard variieren - und das Standardjederzeit ändern kann , während der Laufzeit.
Es ist eigentlich einfach. Ein Tag enthält 86400000 Millisekunden. Sie erhalten also zuerst die aktuelle Zeit in Millis von The System, indem System.currentTimeMillis()
Sie die 84000000 Millisekunden hinzufügen und dann mit der Date
Klasse ein Datumsformat für die Millisekunden generieren.
Beispiel
String Today = new Date(System.currentTimeMillis()).toString();
String Today wird 2019-05-9 sein
String Tommorow = new Date(System.currentTimeMillis() + 86400000).toString();
String Tommorow wird 2019-05-10 sein
String DayAfterTommorow = new Date(System.currentTimeMillis() + (2 * 86400000)).toString();
String DayAfterTommorow wird 2019-05-11 sein
Date
Klasse, die vor Jahren durch die modernen java.time- Klassen ersetzt wurde. So viel einfacher zu bedienen:LocalDate.parse( "2019-01-23" ).plusDays( 1 )
Lassen Sie uns den Anwendungsfall verdeutlichen: Sie möchten Kalenderarithmetik durchführen und mit einem java.util.Date beginnen / enden .
Einige Ansätze:
Erwägen Sie die Verwendung von java.time.Instant :
Date _now = new Date();
Instant _instant = _now.toInstant().minus(5, ChronoUnit.DAYS);
Date _newDate = Date.from(_instant);
Date
mit den modernen Java.time- Klassen wie Instant
. Die java.time- Klassen ersetzen die Legacy-Klassen vollständig. Insbesondere Instant
ersetzt java.util.Date
.
Date newDate = new Date();
newDate.setDate(newDate.getDate()+1);
System.out.println(newDate);
Sun Apr 30 16:25:33 CEST 2017
kommt Mon May 01 16:25:33 CEST 2017
. Es ist jedoch immer noch eine entmutigte Lösung. Die Methode ist nicht nur aus gutem Grund veraltet, auch 2017 haben wir sehr gute Alternativen zur Date
Klasse.