CompusaMedlem sedan jan. 20023 327 inlägg Sitter och pular lite med en metod som ska hantera ett födelsedatum. Månadsformatet är i 01, 02, 04 osv.
Av någon anledning kan jag inte använda mig av 08 för augusti? 08 är tydligen för stor för datatypen int, är detta möjligt och hur ska jag istället lösa det på bästa sätt? Har försökt använda andra datatyper med men nu verkar enda lösningen att ha den som sträng vilket är lite knöligt.
jmeMedlem sedan maj 20012 237 inlägg Skippa nollan, då fungerar det.
Vill du att 25.8.2005 skrivs som 25.08.2005 så kan du använda följande:
DateFormat df = new SimpleDateFormat("dd.MM.yyyy"); // pröva att skriva "yyyy.MM.dd"
System.out.println(df.format(new Date() ) );
CompusaMedlem sedan jan. 20023 327 inlägg Tack för svaret. Probelemet är att jag tar emot personnummer exempelvis 820805-XXXX. Då får jag månaden i 08 format. Nu måste jag ta emot den som en sträng för att sedan ta bort nollan och göra om den till en int för att kunna använda mig av en switch.
Det känns lite omständigt?
jmeMedlem sedan maj 20012 237 inlägg nejdå:
snippa bort -xxxx och sedan kör du helt enkelt:
DateFormat df = new SimpleDateFormat("M");
int month = Integer.parseInt(df.format(new Date() ) );
CompusaMedlem sedan jan. 20023 327 inlägg När jag ändå är igång och frågar. Vad tror du om denna metod för att kolla om ett år ett skottår eller inte?
/**
* Checks wheter a given year was a leap year or not,
*
* @return true if leap year otherwise false
*/
public boolean isLeapYear(int Num) {
if(Num % 4 == 0 && Num % 100 != 0 || Num % 400 == 0) {
return true;
}
return false;
}
UlfTMedlem sedan maj 20018 027 inlägg I princip har du tänkt rätt. Men hade jag varit i ditt ställe, hade jag petat in ytterliggare några parenteser i villkoret, så att det verkligen jämför rätt. Något i denna stil, tänker jag mig:
if ([b]([/b]Num % 4 == 0 && Num % 100 != 0[b])[/b] || Num % 400 == 0)
Då känner jag mig säkrare på hur villkoret verkligen tolkas. :)
CompusaMedlem sedan jan. 20023 327 inlägg Tack för responsen. Java sköter det där med paranteserna automatiskt men visst blir det tydligare men paranteser för ögat så jag följer ditt råd. :)
En förutsättning för att det också ska tolkas helt rätt är väl att man anger personnummer enligt 19820805-xxxx? För om man är född 00 som 1900 och 00 som i 2000 så infaller skottår endast på det senare. Är jag rätt ute?
Förvisso är det inte alltför många som är över hundra år men är det inte bättre att använda sig av 1982 istället för 82? Eller kan man sköta det på ett smart sätt i det dolda?
Har sett att exempelvis en större banksida endast kräver YYMMDD-xxxx vid inloggning. Ett sett skulle vara att neka födelsenummer äldre än 100 år. Det är kanske så de gör för då är det fullt möjligt att beräkna vilka tilläggssiffor som ska läggas till framför året.
Ytterliggare en fråga som kanske jme kan hjälpa mig med. Går det inte att göra detta bättre? Har gjort som du tipsat mig om men det känns lite för omständigt ändå, kanske går att bättra på min kod?
SimpleDateFormat sdf = new SimpleDateFormat(pnr.substring(0,6));
int year = Integer.parseInt(sdf.format(new Date()));
sdf = new SimpleDateFormat(pnr.substring(2,4));
int month = Integer.parseInt(sdf.format(new Date()));
sdf = new SimpleDateFormat(pnr.substring(4,6));
int day = Integer.parseInt(sdf.format(new Date()));
Skulle vilja kunna slänga in hela datumet på en gång för att sedan plocka ut år, månad, datum. Typ sdf.getMonth()
En lösning skulle vara att gör en klass som utökar SimpleDate kanske?
Kanske något i den här stilen:
SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd");
Date date = sdf.parse(pnr.substring(0,6));
Calendar cal = GregorianCalendar.getInstance();
cal.setTime(date);
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
Tänk bara på att månader i Java börjar på 0, dvs Januari = 0, Februari = 1, ..., December = 11
UlfTMedlem sedan maj 20018 027 inlägg
Compusa skrev:
Java sköter det där med paranteserna automatiskt
Det låter ju praktiskt, även om jag inte förstår hur Java-kompilatorn ska kunna veta var just du hade tänkt sätta parenteserna. :)
Compusa skrev:
En förutsättning för att det också ska tolkas helt rätt är väl att man anger personnummer enligt 19820805-xxxx? För om man är född 00 som 1900 och 00 som i 2000 så infaller skottår endast på det senare. Är jag rätt ute?
En förutsättning, är det inte. Man kan ju göra intelligenta gissningar. Men helt klart är det säkrare att ange även århundrade. Även intelligenta gissningar kan ju vara felaktiga.
Min internetbank hade under en kort tid krav på att ange århundrade i personnumret. Men det kravet försvann efter bara någon månad. Jag antar att det kom klagomål från många som av ren vana struntade i århundradesiffrorna.