Java.lang.norsk/Kalender rutinel
Fra Hiofwiki
Her er en liten rutine som forteller deg hva dagen heter, etter du har oppgitt en dato(ddmmååå).
Fritt frem for å forandre, forbedre, rette feil, rydde opp eller brukes...Bare legg ut det du forandrer her;)
Den er testet og jeg kan ikke finne noen bugs...
Mvh Tor Asmund Wisur
P.S Koden kan lett modifiseres til å bli en fullstendig kalender!
// Fortell meg en dato, og jeg kan si deg hvilken dag det er på......
// Kildekoden har sin inspirasjon fra Bjørn Erik Stubberud : http://atvs.vg.no/player/?id=10177
// Regner han ut datoer eller har han pugget dem??
// I 1582 ble en kalenderreform gjennomført av pave Gregor XIII.
// Den gregorianske kalenderen utelot 10 dager for å komme i rute med solåret igjen.
// Et normalt år har 365 dager med 28 dager i februar.
// Skuddår har 29 dager i februar og 366 dager i et år
// Et skuddår er normalt hvert 4. år i alle tall som er delelige med 4
// Unntak er hundreårene som ikke er skuddår dersom de ikke er delelige med 400
// Kilde: no.wikipedia.org og www.festleksikon.dk
// Rutinen vil regne ut mange dager det er frem til det bruker angir.
// Algoritmen vil se slik ut:
//(heltalldivisjon!!)
// Dato = (dag) , (måned) , (år)
// Antall dager=((år-1)*365)+(år-1)/4)-((år-1)/100))+((år-1)/400)+(ant.dager frem til måned)+dag)
// Kvotient = Antall dager / 7
// Dag indikator=(Antall dager - (Kvotient * 7))
// Dag indikator = definisjon av dagen fra 0-6.
// 0=Mandag 1=Tirsdag 2=Onsdag 3=Torsdag 4=Fredag 5=Lørdag 6=Søndag
// Brukerinput
int $dato=0;
String $dato2;
int $dd = 0;
int $mm = 0;
int $aaaa = 0;
//input i formatet ddmmåååå
$dato2=JOptionPane.showInputDialog(null," Tast inn dato (ddmmåååå):\n\n"+
" (Fra år:01010001 til år:31129999)\n\n");
try {$dato = Integer.parseInt($dato2);}
catch (NumberFormatException e){$dato=0;} //INGEN bokstaver blir godkjent!
while ($dato >= 1000000) {$dato-=1000000; $dd++;} //Henter ut input-dagen og legger den i $dd
while ($dato >= 10000) {$dato-=10000; $mm++;} //Henter ut måneden og legger den i $mm
while ($dato >= 1) {$dato--; $aaaa++;} //Henter ut året og legger den i $aaaa
$aaaa--; //Ønsker å regne frem til starten av året.
int $dagteller=($aaaa)*365; // Antall dager i et år * input år
int $skuddaar=($aaaa)/4; // Antall skuddår
//Fjerner man disse 2 linjer under vil man gå over til den julianske kalender;)
$skuddaar-=($aaaa)/100; // Fjerner skuddår i alle hundreår
$skuddaar+=($aaaa)/400; // Hundreårene som er delelig med 400 er skuddår. MÅ adderes tilbake igjen..
//antall dager pr.måned i et år..Blir korr. for skuddår
float $datolengde[]={0,0,31,28,31,30,31,30,31,31,30,31,30,31};
//Sjekker om input årstall er skuddår....
// Og korrigerer februar i float $datolengde. ((årstall-1) + 1) - ønsker å korrigere _dette_ året om skuddår!
int $kontroll1=($aaaa+1)%4;
int $kontroll2=($aaaa+1)%100;
int $kontroll3=($aaaa+1)%400;
if ($kontroll1==0) $datolengde[3]=29;
if ($kontroll2==0) {if ($kontroll3!=0) {$datolengde[3]=28;}
}
//Sjekker om feil med brukerinput...
String $feil=" Avbryter / Feil med input!";
if ($mm == 00 || $mm >12 || $dd==0 || $aaaa<0) //Sjekker for diverse feil med inputdata!
{ JOptionPane.showMessageDialog(null,$feil); return;}
//Sjekker for riktig dag i mnd....
//Tar hensyn til skuddår inputfeil (f.eks 29.02.2001) ved å bruke tabellen $datolengde!
for (int i=1;i!=13;i++) if ($mm==i && $dd > (int)$datolengde[(i+1)])
{ JOptionPane.showMessageDialog(null,$feil); return;}
//Informerer om kalender-reformen!
if ($aaaa <= 1582 && $mm<=10 && $dd<=14)
JOptionPane.showMessageDialog(null,"Den gregorianske kalenderen ble tatt i bruk 15.oktober 1582\n" +
" (Og for oss nordmenn 1. mars 1700)\n"+
"\nDagen vil uansett bli regnet etter Gregorianske kalenderen\n");
//Regner ut antal dager til den riktige input måned
int $mmteller=0;
int $mmpeker=$mm-1;
int $antdagmnd=0;
//Går fremover i tabellen, henter og legger til antall dager.
for (int i=0;i<=$mm;i++) $antdagmnd+=$datolengde[i];
//antdagmnd er summen i måneden
int $dager=$dd-1;
int $dag=($dager+$antdagmnd+$dagteller+$skuddaar)%7;//Modulus 7 av alle dager frem til brukerinput-datoen.
//$dag definerer dagene derfor som følger:
//0=Mandag 1=Tirsdag 2=Onsdag 3=Torsdag 4=Fredag 5=Lørdag 6=Søndag
//(Dette fant jeg ut ved å taste inn dagen idag 30.8.2007 i programmet som ga meg modulus 3 som er Torsdag)
//Skriver resultatet ut på skjermen!
char[] $ukebokst= {'M','a','n','T','i','r','O','n','s','T','o','r','F','r','e','L','ø','r','S','ø','n'};
char[] $ukenavn= {'0','0','0'};
for (int i=0;i!=3;i++)$ukenavn[i]=$ukebokst[($dag*3)+i];String $pr_ukenavn = new String($ukenavn);
if ($dag==1 || $dag==3) $pr_ukenavn = new String($ukenavn) + "s";
JOptionPane.showMessageDialog(null,$dd + "-" + $mm + "-" + ($aaaa+1) + " er på en " + $pr_ukenavn + "dag");
//Jeg ble født på en Tirsdag;) MVH Tor A. Wisur
}
}
