2013-05-06 18 views
39

Jak zmniejszyć jednego miesiąca od bieżącej daty i chcą ból w java.util.Date zmiennej im przy użyciu tego kodu, ale to pokazuje błąd w 2. liniiJak zmniejszyć jeden miesiąc od bieżącej daty i zapisać w zmiennej daty przy użyciu java?

java.util.Date da = new Date(); 
da.add(Calendar.MONTH, -1); //error 

Jak przechowywać tę datę w java.util.Date zmiennej?

+0

Use "Kalendarz" class – anstarovoyt

+1

Zobacz ten [odpowiedź] (http://stackoverflow.com/questions/1311143/java-util-date-deleting-three-months-from-a- data) – Amarnath

+0

ya użyłem tej klasy .. – karthi

Odpowiedz

73

Aplikacja Kalendarz:

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.MONTH, -1); 
Date result = cal.getTime(); 
+0

cal.getTime() zwraca obiekt Date –

7
Calendar calNow = Calendar.getInstance() 

// adding -1 month 
calNow.add(Calendar.MONTH, -1); 

// fetching updated time 
Date dateBeforeAMonth = calNow.getTime(); 
+0

jak zapisać tę datę w terminie zmienna – karthi

+1

@karthi 'Data DATEVALUE = calNow.getTime();' .... – MadProgrammer

4

można użyć Calendar

java.util.Date da = new Date(); 
    Calendar cal = Calendar.getInstance(); 
    cal.setTime(da); 
    cal.add(Calendar.MONTH, -1); 
    da = cal.getTime(); 
+1

(zakładam użycie ' setTime' jest dla celów demonstracyjnych, ponieważ 'Calendar.getInstance' zwróci' Kalendarz' ustawiony na bieżącą datę/czas ... możesz również umieścić 'da = cal.getTime()' tak, że skończysz z wartością 'Date' na końcu ...) – MadProgrammer

+0

Tak, masz rację! dzięki. – Ahiel

5

Korzystanie JodaTime:

Date date = new DateTime().minusMonths(1).toDate(); 

JodaTime zapewnia wygodny interfejs API dla data Manip lokalizacja.

Należy zauważyć, że podobny datownik API zostanie wprowadzony w JDK8 z JSR310.

+0

nieaktualna metoda. –

3

Zaczynając od Javy 8, sugerowanym sposobem jest użycie Date-Time API zamiast Calendar.

Jeśli chcesz Date przedmiot zostać zwrócone:

Date date = Date.from(ZonedDateTime.now().minusMonths(1).toInstant()); 

Jeśli nie trzeba dokładnie się Date obiektu, można użyć bezpośrednio klasy, dostarczonych przez pakiet, nawet dostać się w inny termin strefy czasowe:

ZonedDateTime dateInUTC = ZonedDateTime.now(ZoneId.of("Pacific/Auckland")).minusMonths(1); 
+0

Proponuję zmienić tę odpowiedź, aby pokazać określoną strefę czasową, np. 'ZoneId.of (" Pacific/Auckland ")' zamiast 'ZoneOffset.UTC'. Jeśli ktoś naprawdę chciał UTC, bardziej odpowiednie byłoby użycie 'OffsetDateTime' niż' ZonedDateTime'. –

+0

Dobra uwaga, aktualizacja :) – DVarga

Powiązane problemy