Si può applicare questa formula per calcolare il giorno della settimana dalla data:
N = anno corrente
q = resto della divisione
t = numero giorni trascorsi dall'inizio dell'anno in questione alla data presa in considerazione
Questa formula vale per qualsiasi data successiva al 15/10/1582.
Sotto una veloce implementazione in una classe Java:
x = N + (q)(N - 1) : 4 - (q)(N - 1) : 100 + (q)(N - 1) : 400 + t
DoveN = anno corrente
q = resto della divisione
t = numero giorni trascorsi dall'inizio dell'anno in questione alla data presa in considerazione
Questa formula vale per qualsiasi data successiva al 15/10/1582.
Sotto una veloce implementazione in una classe Java:
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class GetGiornoSettimana {
/**
* x = N + (q)(N - 1) : 4 - (q)(N - 1) : 100 + (q)(N - 1) : 400 + t
* @param args
*/
public static void main(String[] args) {
GetGiornoSettimana g=new GetGiornoSettimana();
System.out.println(g.getGiornoSettimana(new Date()));
System.out.println(g.getGiornoSettimana(20, 4, 1978));
}
private boolean isLeapYear(int anno){
GregorianCalendar gc=new GregorianCalendar();
return gc.isLeapYear(anno);
}
public String getGiornoSettimana(int giorno,int mese,int anno){
return getGiornoSettimana(creaData(giorno, mese, anno));
}
public String getGiornoSettimana(Date data){
String retVal="";
int anno=getAnnoDaData(data);
int val1=anno+getPrimoElemento(anno);
int giorniTrascorsi=getGiorniFromInizioAnno(data);
int r=val1+giorniTrascorsi;
int resto=r%7;
switch(resto){
case 0:
retVal="sabato";
break;
case 1:
retVal="domenica";
break;
case 2:
retVal="lunedi";
break;
case 3:
retVal="martedi";
break;
case 4:
retVal="mercoledi";
break;
case 5:
retVal="giovedi";
break;
case 6:
retVal="venerdi";
break;
}
return retVal;
}
private int getPrimoElemento(int anno){
return getElemento(anno-1, 4)-getElemento(anno-1, 100)+getElemento(anno-1, 400);
}
private int getElemento(int anno,int div){
int r=(int)Math.floor((double)anno/(double)div);
System.out.println(r);
return r;
}
private int getGiorniFromInizioAnno(Date d){
int anno=getAnnoDaData(d);
boolean bisestile=isLeapYear(anno)?true:false;
int retVal=0;
int mese=getMeseDaData(d);
int giorno=getGiornoDaData(d);
for(int i=1;i<mese;i++){
switch(i){
case 2:
retVal+=bisestile?29:28;
break;
case 4:
case 6:
case 9:
case 11:
retVal+=30;
break;
default:
retVal+=31;
break;
}
}
retVal+=giorno;
return retVal;
}
private int getAnnoDaData(Date data){
Calendar c=Calendar.getInstance();
c.setTime(data);
return c.get(Calendar.YEAR);
}
private int getMeseDaData(Date data){
Calendar c=Calendar.getInstance();
c.setTime(data);
return c.get(Calendar.MONTH)+1;
}
private int getGiornoDaData(Date data){
Calendar c=Calendar.getInstance();
c.setTime(data);
return c.get(Calendar.DAY_OF_MONTH);
}
private Date creaData(int giorno,int mese,int anno){
Calendar c=Calendar.getInstance();
c.set(Calendar.YEAR, anno);
c.set(Calendar.MONTH, mese-1);
c.set(Calendar.DAY_OF_MONTH, giorno);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
return c.getTime();
}
}
Nessun commento:
Posta un commento