Wie füge ich dem aktuellen Datum in Java einen Monat hinzu?


Antworten:


115
Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.MONTH, 1);

Danke Piyush, und was dieses cal Datumsformat, ich muss dies in MySQL
Kiran

Der MySQL-Datentyp für Datum ist DATETIME.
Kiran

ist dieses korrekte Datumsformat, das ich zurückgeben kann, um es in
MySQL

1
Der Java-Code zum Hinzufügen eines Monats zum aktuellen Datum im gewünschten Format lautet wie folgt. Jetzt müssen Sie diesen String in ein Datum konvertieren und in die MYSql-Datenbank einfügen. Beachten Sie, dass Sie das Datumsformat im DateFormat-Konstruktor oder höher in der MYSQL-Abfrage mithilfe der Funktion STR_TO_DATE (str, format) ändern können. DateFormat-Formatierer = neues SimpleDateFormat ("JJJJ-MM-TT hh: mm: ss"); Kalender jetzt = Calendar.getInstance (); now.add (Calendar.MONTH, 1); String dateString = formatter.format (now.getTime ());
Piyush Mattoo

3

49

Java 8

LocalDate futureDate = LocalDate.now().plusMonths(1);

1
So haben Sie java.util.Date: Date.from ((LocalDate.now (). PlusMonths (1)). AtStartOfDay (). AtZone (ZoneId.systemDefault ()). ToInstant ())
Ismail Yavuz


29

tl; dr

LocalDate::plusMonths

Beispiel:

LocalDate.now( )
         .plusMonths( 1 );

Besser Zeitzone angeben.

LocalDate.now( ZoneId.of( "America/Montreal" )
         .plusMonths( 1 );

java.time

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 .

Nur Datum

Wenn Sie nur das Datum möchten, verwenden Sie die LocalDateKlasse.

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

Terminzeit

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 Instantin 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.0so, dass Java.time die Tageszeit bestimmt.

ZonedDateTime zdtMonthLaterStartOfDay = zdtMonthLater.toLocalDate().atStartOfDay( zoneId );

Ü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 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 .


Joda-Zeit

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();

12
Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.MONTH, 1);
java.util.Date dt = cal.getTime();

6

(angepasst von Duggu)

public static Date addOneMonth(Date date)
{
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    cal.add(Calendar.MONTH, 1);
    return cal.getTime();
}

6

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();

5
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 ;
}`

Können Sie erklären, was Ihr Code tut und nicht nur einen großen Codeblock?
Necoras

Mein Code ist restriktiver und allgemeiner. Restriktiver, da nur das Datum (in Form einer Zeichenfolge) mit dem festen Format "MM / TT / JJJJ" verarbeitet wird. Allgemein, weil Sie damit einen beliebigen positiven Monat an Ihrem angegebenen Datum hinzufügen können.
DJAM Silvère Gatien

Wenn Sie also einen weniger restriktiven Code benötigen, der java.util.Date verwendet und nach dem Hinzufügen eines Monats ein weiteres java.util.Date rendert, siehe unten: Calendar cal = Calendar.getInstance (); cal.setTime (Datum); cal.add (Calendar.MONTH, 1); cal.getTime ();
DJAM Silvère Gatien

3

Sie können die DateUtils-Klasse im Paket org.apache.commons.lang3.time verwenden

DateUtils.addMonths(new Date(),1);

Einfache und einfache Lösung.
Royal.O

2

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)


Vergessen Sie nicht, das Suffix 'L' zur Nummer hinzuzufügen, wenn dies als einfaches int behandelt wird und zu einer negativen Zahl überläuft!
Nicolas Buquet

1

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);

* @deprecated Ab JDK Version 1.1 * ersetzt durch <code> Calendar.set (Calendar.MONTH, int month) </ code>. Wie die Date.java sagt.
Jasper Lankhorst

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);
    }

Zu Ihrer Information, die furchtbar mühsam Datum Zeitklassen wie java.util.Date, java.util.Calendarund java.text.SimpleDateFormatsind jetzt Erbe , durch die verdrängte java.time Klassen in Java gebaut 8 und höher. Siehe Tutorial von Oracle .
Basil Bourque

0

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();
}`

0
    Date dateAfterOneMonth = new DateTime(System.currentTimeMillis()).plusMonths(1).toDate();

-3
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

1
Erstens ist die Antwort aufgrund des OP falsch. Zweitens: Das OP wurde vor 8 (!) Jahren beantwortet, und drittens gibt es bessere Möglichkeiten, eine Datumsausgabe zu formatieren, als viele Zeichenfolgen zu verwenden.
Markus Deibel
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.