Entra

View Full Version : [Java]Calcolo delle date;


snowboard_extr3me
25-01-2008, 19:00
Ciao ragazzi! devo fare una agenda e cercare di fare in modo che possa fissare degli appuntamenti,per fissare l'appuntamento devo dare da tastiere anno mese giorno minuti ore e secondi.
però devo controllare che la posizione nel tempo sia successiva all'istante attuale E che la data prescelta per l'appuntamento sia corretta,per esempio nn posso fissare un appuntamento per il 29 febbraio 2009 ma per il 29 febbraio 2012si.ho creato 2 classi,la prima funziona egregiamente e prende il tempo dal locale,la seconda è fatta da 6 metodi e dovrebbero fare in modo che controllino i parametri passati e modifichino cosi gli attributi.
di questi 6 metodi solo l'ultimo(secondi) ha anche il controllo della posteriorità nel tempo rispetto all'istante attuale,però sembra non funzionare.
copio e incollo qui le 3 classi,iltempi,ladata e bisestile che mi controlla se l'anno è bisestile.
import java.util.*;
-------------------------------------------------------------------
public class ILTEMPO{
int anno;
int mese;
int giorno;
int ore;
int minuti;
int secondi;

public void tempo(){

Calendar calendario = new GregorianCalendar();



giorno = calendario.get(Calendar.DAY_OF_MONTH);
mese = calendario.get(Calendar.MONTH);
anno = calendario.get(Calendar.YEAR);
ore = calendario.get(Calendar.HOUR);
minuti = calendario.get(Calendar.MINUTE);
secondi = calendario.get(Calendar.SECOND);

}

public void cheoresono(){
System.out.println("Sono le : " + ore + ":" + minuti + ":" + secondi + " " + " Data "+ giorno +":" + (mese+1) +":" + anno);
}




}
-------------------------------------------------------------------------
/*Scrivere un programma che,dato il numero AA rappresentante un anno,verifichi se questo è bisestile.*/

/*L’anno bisestile è l’anno durante il quale viene aggiunto un giorno extra nel mese di Febbraio.
L’anno bisestile è ogni anno che sia divisibile per 400 o divisibile per 4 ma non divisibile per 100.
Ad esempio, l’anno 1996 è un anno bisestile in quanto divisibile per 4 ma non divisibile per 100.
Il 1700, il 1800, il 1900 non sono bisestili, mentre il 1600 e il 2000 sono anni bisestili in quanto divisibili per 400.*/


public class Bisestile {



public static boolean bisestile(int anno){
boolean b=false;
if(anno%400==0){System.out.print(anno+"-----> L'anno è bisestile");
b=true; }

else if(((anno%4)==0)&((anno%100)!=0))
{System.out.print(anno+"-----> L'anno è bisestile");
b=true; }
else if(((anno%4)==0)&((anno%100)==0))
{System.out.print(anno+"-----> L'anno non è bisestile");
b=false; }
return b;
}


}
--------------------------------------------------------------------------

public class ladata {
/*private String gennaio=new String("gennaio");
private String febbraio=new String("febbraio");
private String marzo=new String("marzo");
private String aprile=new String("aprile");
private String maggio=new String("maggio");
private String giugno=new String("giugno");
private String luglio=new String("luglio");
private String agosto=new String("agosto");
private String settembre=new String("settembre");
private String ottobre=new String("ottobre");
private String novembre=new String("novembre");
private String dicembre=new String("dicembre");*/

private int anno;
private int mese;
private int giorno;
private int ore;
private int minuti;
private int secondi;




public void anno(){
int a;
do{
System.out.println("Inserisci l'anno");
Numero n=new Numero();
a=n.leggiNumero();
}
while(!(2007<a&&a<2100));
anno=a;
}

public void mese(){
int a;
do{ System.out.println("Inserisci il mese:da 1(gennaio) a 12 (dicembre)");
Numero n=new Numero();
a=n.leggiNumero();

}
while(!(0<a&&a<13));
mese=a;
}

public void giorno(){
int a;
System.out.println("Inserisci il giorno:da 1 a 31 massimo");
if(mese==1){do{Numero n=new Numero();
a=n.leggiNumero();}while(!(0<a&&a<32));giorno=a;}
if(mese==2&&Bisestile.bisestile(anno)){do{Numero n=new Numero();
a=n.leggiNumero();}while(!(0<a&&a<30));giorno=a;}
if(mese==2&&!(Bisestile.bisestile(anno))){do{Numero n=new Numero();
a=n.leggiNumero();}while(!(0<a&&a<29));giorno=a;}
if(mese==3){do{Numero n=new Numero();
a=n.leggiNumero();}while(!(0<a&&a<32));giorno=a;}
if(mese==4){do{Numero n=new Numero();
a=n.leggiNumero();}while(!(0<a&&a<31));giorno=a;}
if(mese==5){do{Numero n=new Numero();
a=n.leggiNumero();}while(!(0<a&&a<32));giorno=a;}
if(mese==6){do{Numero n=new Numero();
a=n.leggiNumero();}while(!(0<a&&a<31));giorno=a;}
if(mese==7){do{Numero n=new Numero();
a=n.leggiNumero();}while(!(0<a&&a<32));giorno=a;}
if(mese==8){do{Numero n=new Numero();
a=n.leggiNumero();}while(!(0<a&&a<32));giorno=a;}
if(mese==9){do{Numero n=new Numero();
a=n.leggiNumero();}while(!(0<a&&a<31));giorno=a;}
if(mese==10){do{Numero n=new Numero();
a=n.leggiNumero();}while(!(0<a&&a<32));giorno=a;}
if(mese==11){do{Numero n=new Numero();
a=n.leggiNumero();}while(!(0<a&&a<31));giorno=a;}
if(mese==12){do{Numero n=new Numero();
a=n.leggiNumero();}while(!(0<a&&a<32));giorno=a;}

}

public void ore(){
int a;
do{ System.out.println("Inserisci l'ora,dalle 0 alle 23");
Numero n=new Numero();
a=n.leggiNumero();

}
while(!(0<=a&&a<24));
ore=a;
}
public void minuti(){
int a;

do{ System.out.println("Inserisci il minuto ,dalle 0 alle 59");
Numero n=new Numero();
a=n.leggiNumero();

}
while(!(0<=a&&a<60));
minuti=a;
}




public void secondi(){
int a;
ILTEMPO iltempo=new ILTEMPO();
iltempo.tempo();
if(iltempo.anno<=this.anno){if(iltempo.mese<=this.mese){if(iltempo.giorno<=this.giorno){if(iltempo.ore<=this.ore){if(iltempo.minuti<=this.minuti){if(iltempo.secondi<=this.secondi){
do{ System.out.println("Inserisci i secondi,da 1 a 59");
Numero n=new Numero();
a=n.leggiNumero();
}
while(!(0<=a&&a<60));
secondi=a;
}else secondi();}else secondi();}else secondi();}else secondi();}else secondi();}else secondi();

}

}

wingman87
25-01-2008, 19:14
Usa il tag code per postare il codice, in questo modo mantieni l'indentazione ed è tutto più leggibile.
Ho dato giusto un'occhiata, il codice mi sembra un po' troppo confusionario, oltretutto non c'è neanche un commento.
Penso che tu abbia complicato le cose, prova a guardare questo metodo:

Calendar - after (file:///C:/Users/proprietario/Desktop/docs/api/java/util/Calendar.html#after(java.lang.Object))