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, botów: 0