Wie kann ich in Java einen Monat zum aktuellen Datum hinzufügen?
Antworten:
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, 1);
Java 8
LocalDate futureDate = LocalDate.now().plusMonths(1);
Sie können die Hilfsdienstprogrammklasse lang DateUtils von apache verwenden.
Date newDate = DateUtils.addMonths(new Date(), 1);
Sie können commons lang jar unter http://commons.apache.org/proper/commons-lang/ herunterladen.
LocalDate::plusMonths
Beispiel:
LocalDate.now( )
.plusMonths( 1 );
Besser Zeitzone angeben.
LocalDate.now( ZoneId.of( "America/Montreal" )
.plusMonths( 1 );
Das java.time- Framework ist in Java 8 und höher integriert. Diese Klassen verdrängen die alten lästigen Datum Zeitklassen wie java.util.Date
, .Calendar
, & java.text.SimpleDateFormat
. Das Joda-Time- Team empfiehlt außerdem die Migration zu java.time.
Weitere Informationen finden Sie im Oracle-Lernprogramm . Suchen Sie im Stapelüberlauf nach vielen Beispielen und Erklärungen.
Ein Großteil der Funktionen von java.time wird in ThreeTen-Backport auf Java 6 & 7 zurückportiert und in ThreeTenABP weiter an Android angepasst .
Wenn Sie nur das Datum möchten, verwenden Sie die LocalDate
Klasse.
ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );
today.toString (): 2017-01-23
Fügen Sie einen Monat hinzu.
LocalDate oneMonthLater = today.plusMonths( 1 );
oneMonthLater.toString (): 23.02.2017
Vielleicht möchten Sie eine Tageszeit zusammen mit dem Datum.
Erhalten Sie zuerst den aktuellen Moment in UTC mit einer Auflösung von Nanosekunden .
Instant instant = Instant.now();
Das Hinzufügen eines Monats bedeutet das Bestimmen von Daten. Um Daten zu bestimmen, muss eine Zeitzone angewendet werden. Für jeden Moment variiert das Datum auf der ganzen Welt, wobei ein neuer Tag früher im Osten beginnt. Stellen Sie das also Instant
in eine Zeitzone ein.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
Fügen Sie nun Ihren Monat hinzu. Lassen Sie java.time den Schaltmonat und die Tatsache, dass die Monate unterschiedlich lang sind, verarbeiten.
ZonedDateTime zdtMonthLater = zdt.plusMonths( 1 );
Möglicherweise möchten Sie die Tageszeit an den ersten Moment des Tages anpassen, wenn Sie diese Art der Berechnung durchführen. Dieser erste Moment ist nicht immer 00:00:00.0
so, dass Java.time die Tageszeit bestimmt.
ZonedDateTime zdtMonthLaterStartOfDay = zdtMonthLater.toLocalDate().atStartOfDay( zoneId );
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 den Klassen 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 .
Update: Das Joda-Time-Projekt befindet sich jetzt im Wartungsmodus. Das Team empfiehlt die Migration zu den Klassen java.time. Ich lasse diesen Abschnitt für die Nachwelt intakt.
Die Joda-Time- Bibliothek bietet eine Methode, um Monate auf intelligente Weise hinzuzufügen.
DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" );
DateTime now = DateTime.now( timeZone );
DateTime nextMonth = now.plusMonths( 1 );
Sie können sich auf den Tag konzentrieren, indem Sie die Tageszeit an den ersten Moment des Tages anpassen.
DateTime nextMonth = now.plusMonths( 1 ).withTimeAtStartOfDay();
Verwenden Sie den Kalender und probieren Sie diesen Code aus.
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, 1);
calendar.set(Calendar.DATE, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
Date nextMonthFirstDay = calendar.getTime();
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
Date nextMonthLastDay = calendar.getTime();
public Date addMonths(String dateAsString, int nbMonths) throws ParseException {
String format = "MM/dd/yyyy" ;
SimpleDateFormat sdf = new SimpleDateFormat(format) ;
Date dateAsObj = sdf.parse(dateAsString) ;
Calendar cal = Calendar.getInstance();
cal.setTime(dateAsObj);
cal.add(Calendar.MONTH, nbMonths);
Date dateAsObjAfterAMonth = cal.getTime() ;
System.out.println(sdf.format(dateAsObjAfterAMonth));
return dateAsObjAfterAMonth ;
}`
Sie können die DateUtils-Klasse im Paket org.apache.commons.lang3.time verwenden
DateUtils.addMonths(new Date(),1);
Wenn Sie einen Einzeiler benötigen (dh für die Jasper Reports-Formel) und es Ihnen nichts ausmacht, wenn die Anpassung nicht genau einen Monat beträgt (dh "30 Tage" sind ausreichend):
new Date($F{invoicedate}.getTime() + 30L * 24L * 60L * 60L * 1000L)
Sie können so verwenden;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String d = "2000-01-30";
Date date= new Date(sdf.parse(d).getTime());
date.setMonth(date.getMonth() + 1);
Um den Tag nach einem Monat zu finden, muss man sich ansehen, welcher Tag des Monats heute ist.
Wenn der Tag also der erste Tag des Monats ist, führen Sie den folgenden Code aus
Calendar calendar = Calendar.getInstance();
Calendar calFebruary = Calendar.getInstance();
calFebruary.set(Calendar.MONTH, Calendar.FEBRUARY);
if (calendar.get(Calendar.DAY_OF_MONTH) == 1) {// if first day of month
calendar.add(Calendar.MONTH, 1);
calendar.set(Calendar.DATE, calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
Date nextMonthFirstDay = calendar.getTime();
System.out.println(nextMonthFirstDay);
}
Wenn der Tag der letzte Tag des Monats ist, führen Sie die folgenden Codes aus.
else if ((calendar.getActualMaximum(Calendar.DAY_OF_MONTH) == calendar.get(Calendar.DAY_OF_MONTH))) {// if last day of month
calendar.add(Calendar.MONTH, 1);
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
Date nextMonthLastDay = calendar.getTime();
System.out.println(nextMonthLastDay);
}
Wenn der Tag im Februar ist, führen Sie den folgenden Code aus
else if (calendar.get(Calendar.MONTH) == Calendar.JANUARY
&& calendar.get(Calendar.DAY_OF_MONTH) > calFebruary.getActualMaximum(Calendar.DAY_OF_MONTH)) {// control of february
calendar.add(Calendar.MONTH, 1);
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
Date nextMonthLastDay = calendar.getTime();
System.out.println(nextMonthLastDay);
}
Die folgenden Codes werden für andere Fälle verwendet.
else { // any day
calendar.add(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
Date theNextDate = calendar.getTime();
System.out.println(theNextDate);
}
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 .
Diese Methode gibt das aktuelle Datum plus 1 Monat zurück.
public Date addOneMonth() {
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, 1);
return cal.getTime();
}`
Date dateAfterOneMonth = new DateTime(System.currentTimeMillis()).plusMonths(1).toDate();
public class StringSplit {
public static void main(String[] args) {
// TODO Auto-generated method stub
date(5, 3);
date(5, 4);
}
public static String date(int month, int week) {
LocalDate futureDate = LocalDate.now().plusMonths(month).plusWeeks(week);
String Fudate = futureDate.toString();
String[] arr = Fudate.split("-", 3);
String a1 = arr[0];
String a2 = arr[1];
String a3 = arr[2];
String date = a3 + "/" + a2 + "/" + a1;
System.out.println(date);
return date;
}
}
Ausgabe:
10/03/2020
17/03/2020