web-dev-qa-db-fra.com

Ajout de jours au calendrier

Je suis nouveau sur ce site et je viens de commencer à apprendre Java. J'essaie d'ajouter quelques jours au calendrier grégorien, mais cela ne fonctionne pas. Ici ... (Ignorez le morceau du haut), c’est ennuyeux d’ajouter des dates en bas. 

/*
 * Author:Matt M
 * Date:8.12.13
 * Discription: When the user inputs the deadline, and the difficulity of the project, 
 * the program gives the date he should start working on it 
 */
import Java.util.*;
public class DeadlinePlanner{
    public static void main(String[] args)
    {
        //take information and restart questions if information is wrong 
        int month = 0, day = 0 ; 
        do
        {
        do
        {
        System.out.println("Input the month please");
        month = (new Scanner(System.in).nextInt() - 1);
        System.out.println("Input the day please");
        day = (new Scanner(System.in).nextInt());

        }
        while (!(month <= 12) || !(month >= 0));
        }
       while (!(day <= 31) || !(month >= 0));

       //Make new calender and initialize it 
       GregorianCalendar setup = new GregorianCalendar();
       setup.set(2013, month, day);
       System.out.println("The deadline is "+ setup.getTime());

       //switch statement to give starting date
       System.out.println("Is the project hard or easy?");
       Scanner difficulity = new Scanner(System.in);

       switch (difficulity.nextLine())
       {

           case "easy":


               setup.add(day, -1);
               System.out.print("The date you should start workinng on is ");
               System.out.println(setup.getTime());
               break;
           case "hard":

               setup.add(day, -10);
               System.out.print("The date you should start workinng on is ");
               System.out.println(setup.getTime());

               break;
           default:
               System.out.println("Your answers to the questions are incorrect");
               break;
       }

    }
}

Merci d'avoir lu tout ça! Je suis ouvert à tout commentaire ... 

7
user2676580

Il y a trop de code ici. Trop d'interaction utilisateur. 

Commencez avec une méthode simple pour faire une chose, puis éliminez-vous une fois que vous avez réussi.

Voici comment vous pouvez le faire:

public class DateUtils {
    private DateUtils() {}

    public static Date addDays(Date baseDate, int daysToAdd) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(baseDate);
        calendar.add(Calendar.DAY_OF_YEAR, daysToAdd);
        return calendar.getTime();
    }
}

Une fois que vous avez testé et prouvé cette méthode, vous pouvez laisser le reste de votre code l'appeler. 

MISE À JOUR: Quatre ans plus tard, JDK 8 nous a fourni le nouveau progiciel de gestion du temps basé sur JODA. Vous devriez utiliser ces classes, not the JDK 1.0 Calendar.

19
duffymo

Vous devez changer les lignes qui ressemblent à:

setup.add(day, -1);
setup.add(day, -10);

à 

setup.add(GregorianCalendar.DAY_OF_MONTH, -1);
setup.add(GregorianCalendar.DAY_OF_MONTH, -10);

Voir GregorianCalendar pour plus d'informations.

1
Brinnis

La calandre grégorienne a sa propre valeur que vous devriez utiliser pour lui dire ce que vous augmentez Là où vous dites 

setup.add(day, -1);

vous devez utiliser la valeur calandre grégorienne pour le jour

setup.add(Calendar.DAY_OF_MONTH, -1);
1
Sean F
Calendar c = new GregorianCalendar(2000, Calendar.JANUARY, 1);
c.add(Calendar.DAY_OF_MONTH, 1);

Plus d'informations sur le calendrier et ses champs peuvent être trouvés ici Calendrier

Essayez également de regarder ce post passé: here

0
Susie