2013-02-18 22 views
24

Ich habe alles eingerichtet, um das aktuelle Datum auf eine Variable in Java zu speichern. Was ich herausfinden möchte, ist, wie man ein Datum von 1 Jahr nach dem aktuellen Datum speichert. Hieraktuelles Datum und Datum 1 Jahr von aktuell in Java speichern

import java.util.Date; 
import java.text.SimpleDateFormat; 
import java.text.DateFormat; 
import java.util.Scanner; 
import java.util.Calendar; 

ist, was ich für das aktuelle Datum haben:

DateFormat newDate = new SimpleDateFormat("MM/dd/yyyy"); 
Date date = new Date(); 
startDate = newDate.format(date); 

Also, wenn es heute zum Beispiel wäre, würde es 2013.02.18 speichern. Ich versuche das Datum 18.02.2014 zu speichern. Wie würde ich das machen?

+0

Was ist mit ... 29.02.2016? Was ist ein Jahr davon? – Makoto

+1

mögliches Duplikat von [Jahr zum Java-Kalender hinzufügen funktioniert nicht] (http://stackoverflow.com/questions/3883167/add-year-to-java-calendar-doesnt-work) –

Antwort

68

Wenn Sie keine externen Bibliotheken ziehen möchten, verwenden Sie einfach calendar.add(Calendar.YEAR, 1)

Calendar cal = Calendar.getInstance(); 
Date today = cal.getTime(); 
cal.add(Calendar.YEAR, 1); // to get previous year add -1 
Date nextYear = cal.getTime(); 

Hinweis, wenn das Datum 29/Feb/2012 war und Sie hinzugefügt vor 1 Jahr, erhalten Sie 28/Feb/2013

+1

danke @iTech, das wunderbar funktioniert – bardockyo

+1

Danke, dass es gut funktioniert –

5

Verwenden Calendar#add(int field, int amount) method.You sollte die Kalender-API verwenden, um Datums- und Uhrzeitvorgänge zu bearbeiten.

Calendar today = Calendar.getInstance(); 
Calendar nextYearToday = today; 
nextYearToday.add(Calendar.YEAR, 1); 
-2

In Android ist einfacher als je zuvor:

oneYearAfterDate = new Date(date.getTime() + DateUtils.YEAR_IN_MILLIS)

3

tl; dr

LocalDate.parse( 
    "2/18/2013" , 
    DateTimeFormatter.ofPattern ("M/d/uuuu") 
).plusYears(1) 

Einzelheiten

Die accepted Answer ist richtig, aber veraltet wie von Java 8.

java.time

Die in Java gebaut java.time Rahmen 8 und später verdrängt die lästigen alten java.util.Date/.Calendar Klassen. Die neuen Klassen sind inspiriert von dem sehr erfolgreichen Joda-Time Framework, das als Nachfolger gedacht ist, ähnlich im Konzept, aber neu gestaltet. Definiert von JSR 310. Erweitert um das Projekt ThreeTen-Extra. Siehe Tutorial.

LocalDate

Diese neuen Klassen umfassen LocalDate, ein Datum Wert nur ohne Zeit-of-Tag noch die Zeitzone zu vertreten.

Zuerst müssen wir den String-Eingang analysieren. Die java.time formatter verwendet Pattern-Codes ähnlich den alten Klassen, aber nicht genau die gleichen. Achten Sie also darauf, den neuen Doc sorgfältig zu lesen.

Padded Null

Beachten Sie, dass Ihre Eingabe String fehlt Ziffer Null für einige Werte führt. Das bedeutet, dass Sie die einzelnen Mustercodes M und d statt MM und dd verwenden sollten. Doppelte Codes bedeuten, dass Sie erwarten, dass der Füllgrad Null immer bei sonst einstelligen Werten, 02 statt 2, enthalten ist.

String input = "2/18/2013"; 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ("M/d/uuuu"); 
LocalDate localDate = LocalDate.parse (input , formatter); 

Fügen Sie ein Jahr hinzu. Das java.time Framework kümmert sich um das Schaltjahr.

LocalDate yearLater = localDate.plusYears (1); 

Dump zur Konsole.

System.out.println ("localDate: " + localDate + " and yearLater: " + yearLater); 

LOCALDATE: 2013.02.18 und yearLater: 2014-02-18

+0

Danke. Gutes Beispiel für eine späte Antwort, die immer noch einen enormen Mehrwert bieten kann. – HopeKing

0
Calendar cal = Calendar.getInstance(); 
     Date today = cal.getTime(); 
     cal.add(Calendar.YEAR, 1); // to get previous year add 1 
     cal.add(Calendar.DAY_OF_MONTH, -1); // to get previous day add -1 
     Date expiryDate = cal.getTime(); 


     System.out.println("today is --> "+today); 
     System.out.println("expiryDate is --> "+expiryDate); 

OutPut heute -> Fr 1. Dezember 10.10.52 GMT + 05: 30 2017

ExpiryDate ist -> Fr 30. November 10.10.52 GMT + 05: 30 2018

heute

Datum ist -> Fr 1. Dezember 10.10.52 GMT + 05: 30 2017

ExpiryDate ist -> Fr 30. November 10.10.52 GMT + 05: 30 2018

enter image description here

+0

FYI, die lästigen "Date" - und "Calendar" -Klassen sind nun veraltet und sollten vermieden werden. Sie werden durch die in Java 8 und Java 9 integrierten Klassen java.time ersetzt. Für Java 6 und Java 7 siehe das Projekt * ThreeTen-Backport *. –

+0

Bitte helfen Sie, das Ablaufdatum in Java 9 zu überprüfen. –

+0

Siehe [meine Antwort] (https://stackoverflow.com/a/33967171/642706) für java.time code. –