2013-02-18 12 views
24

Mam wszystko już skonfigurowane, aby zapisać bieżącą datę na zmiennej w Javie. Próbuję dowiedzieć się, jak przechowywać datę 1 roku po bieżącej dacie.Przechowuj bieżącą datę i datę 1 rok od bieżącego w java

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

Oto co mam do bieżącej daty:

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

Więc jeśli to było dzisiaj na przykład byłoby przechowywać 2/18/2013. Próbuję zapisać datę 2/18/2014. Jak miałbym to zrobić?

+0

Co z ... 2/29/2016? Co to jest za rok? – Makoto

+1

możliwe duplikat [Dodaj roku do kalendarza Java nie działa] (http://stackoverflow.com/questions/3883167/add-year-to-java-calendar-doesnt-work) –

Odpowiedz

68

Jeśli nie chcesz, aby przeciągnąć zewnętrznych bibliotek, wystarczy użyć 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(); 

Uwaga, jeżeli data była 29/Feb/2012 i dodano 1 rok, dostaniesz 28/Feb/2013

+1

dzięki @iTech które pracowały pięknie – bardockyo

+1

dzięki jej pracy dobrze –

5

Zastosowanie Calendar#add(int field, int amount) method.You powinien używać interfejsu Calendar API w celu manipulowania operacjami daty i godziny.

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

W Androidzie jest prostsze niż kiedykolwiek:

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

3

tl; dr

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

Szczegóły

accepted Answer jest poprawna, ale przestarzały jak Java 8.

java.time

java.time ramy wbudowany w Java 8 i później wypiera kłopotliwe starych klas java.util.Date/.Calendar. Nowe klasy zostały zainspirowane bardzo popularnym frameworkem Joda-Time, który ma być jego następcą, podobnym do koncepcji, ale zmienionym na nowo. Zdefiniowany przez JSR 310. Rozszerzony o projekt ThreeTen-Extra. Zobacz Tutorial.

LocalDate

Te nowe zajęcia obejmują LocalDate, do reprezentowania wartości daty tylko z no time-of-day ani strefy czasowej.

Najpierw musimy przeanalizować wejście String. java.time formatter używa kodów wzorcowych podobnych do starych klas, ale nie identycznych. Dlatego koniecznie przeczytaj uważnie nowego doktora.

usztywniany Zero

zauważyć, że ciąg wejściowy brakuje zera cyfrę dla niektórych wartości. Oznacza to, że powinieneś używać kodów pojedynczych, M i d zamiast MM i dd. Podwójne kody oznaczają, że zawsze należy uwzględnić dopełnienie zerowe, aby uzyskać jednocyfrowe wartości, tj. 02 zamiast 2.

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

Dodaj rok. Framework java.time zajmuje się rokiem przestępnym.

LocalDate yearLater = localDate.plusYears (1); 

Zrzut na konsolę.

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

LOCALDATE: 18.02.2013 i yearLater: 2014-02-18

+0

Dzięki. Dobry przykład późnej odpowiedzi, która może jeszcze dodać ogromną wartość. – 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); 

wyjście dzisiaj jest -> piątek 01 grudzień 10:10:52 GMT + 05: 30 2017

expiryDate jest -> piątek 30 listopada 10:10:52 GMT + 05: 30 2018

data dzisiaj jest -> Nie Gru 01 10:10:52 GMT + 05: 30 2017

expiryDate jest -> piątek 30 listopada 10:10:52 GMT + 05: 30 2018

enter image description here

+0

FYI, kłopotliwe klasy 'Date' i' Calendar' są już starsze i należy ich unikać. Są one wypierane przez klasy java.time wbudowane w Java 8 i Java 9. W przypadku Java 6 i Java 7 zobacz projekt * ThreeTen-Backport *. –

+0

Proszę pomóc, jak sprawdzić datę ważności w java 9. –

+0

Zobacz [moja odpowiedź] (https://stackoverflow.com/a/33967171/642706) dla kodu java.time. –

Powiązane problemy