2013-08-12 16 views
7

Sono nuovo in questo sito e ho appena iniziato a imparare Java. Sto cercando di aggiungere un paio di giorni al GregorianCalendar ma non funziona. Qui ... (Ignora il pezzo più alto), le date di aggiunta in basso sono fastidiose.Aggiunta di giorni al calendario

/* 
* 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; 
     } 

    } 
} 

Grazie per la lettura attraverso questo! Sono aperto a tutte le risposte ...

risposta

18

C'è troppo codice qui. Troppa interazione dell'utente.

Iniziare con un metodo semplice per fare una cosa, quindi lavorare fuori dopo averlo fatto bene.

Ecco come si potrebbe farlo:

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(); 
    } 
} 

Una volta che avete questo metodo testato e provato si può lasciare che il resto di voi il codice lo chiamano semplicemente.

AGGIORNAMENTO: Sono trascorsi quattro anni e JDK 8 ci ha fornito il nuovo time package basato su JODA. Dovresti utilizzare queste classi, non il JDK 1.0 Calendar.

+0

Grazie mille, la tua risposta è stata davvero utile – user2676580

+0

Sono contento. Buona fortuna salendo la curva di apprendimento di Java. – duffymo

+0

E 'possibile che usare tutti "DAY_OF_X" sia ok? –

1

È necessario modificare le linee simili:

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

a

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

Vedi GregorianCalendar per ulteriori informazioni.

1

calandra Gregoriana ha il suo valore si dovrebbe utilizzare per indicare cosa si stanno aumentando dove si sta dicendo

setup.add(day, -1); 

si dovrebbe usare il valore calandra Gregoriana per il giorno

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

Maggiori informazioni su Calendario e sui suoi campi sono disponibili qui Calendar

Prova anche a guardare questo post passato: here

Problemi correlati