Jak dodać kilka dni do dowolnej daty ?

0

Próbuję stworzyć metodę dodającą dni do dowolnej daty(tutaj akurat chce dodać dni do dzisiejszej), a potem nową datę chce zapisać w kolejnym obiekcie Data. Niestety data się nie zmienia, domyślam się pewnie, że to problem z przekazaniem obiektu.

 
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class Main {
	
	public static Date stringToDate(String date){
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
		Date ndate = new Date();
		try {
			ndate = sdf.parse(date);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return ndate;
	}
	
	public static void addDaysToDate(Date date, int countOfDays){
		Calendar c = Calendar.getInstance();
		c.setTime(date); 
		c.add(Calendar.DATE, countOfDays);
		date = c.getTime();
	}
	public static void main(String[] args){
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
		Date date = new Date();
		addDaysToDate(date, 4);
		System.out.println(sdf.format(date));
		
	}
}

0
        public static Date addDaysToDate(Date date, int countOfDays){
                Calendar c = Calendar.getInstance();
                c.setTime(date); 
                c.add(Calendar.DATE, countOfDays);
                date = c.getTime();
                return date;
        }
        public static void main(String[] args){
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
                Date date = new Date();
                date = addDaysToDate(date, 4);
                System.out.println(sdf.format(date));
 
        }

W javie argumenty przekazywane są przez wartość.
W metodzie:

public static Date addDaysToDate(Date date, int countOfDays)

argument date jest kopią wartości zmiennej date(wskazują na ten sam adres) z metody main, którą przekazujesz. Więc jeszcze wskazują na ten sam obiekt. W momencie gdy w metodzie addDaysToDate

 następuje przypisane <code class="java">date = c.getTime()

metoda getTime()

 tworzy nowy obiekt(referencja jest inna) i go zwraca przypisując do zmiennej date nowy adres.
0

Wielkie dzięki za wyjaśnienie. Mam jeszcze jedno pytanie @olek1

 
	public static Date setDate(int year, int month, int day){
		Date date = new Date();
		Calendar cal = Calendar.getInstance();
		cal.set(Calendar.YEAR, year);
		cal.set(Calendar.MONTH, month);
		cal.set(Calendar.DAY_OF_MONTH, day);
		date = cal.getTime();
		return date;
	}
	public static void main(String[] args){
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
		Date date = new Date();
		date = addDaysToDate(date, 4);
		System.out.println(sdf.format(date));
		date = setDate(1992, 3, 8);
		System.out.println(sdf.format(date));
	}

Zwraca:

 
2013/10/02
1992/04/08

A powinno być 1992/03/08.

1

Miesiące w kalendarzu indeksowane są od 0. Przykładowo:

0 = January = Calendar.JANUARY
1 = february = Calendar.FEBRUARY
0

Błagam, zlitujcie sie... JodaTime + DateTime ;]

0

"Błagam, zlitujcie sie... JodaTime + DateTime ;] " - albo nowe intuicyjne api z Java 8 :P.

1 użytkowników online, w tym zalogowanych: 0, gości: 1