java.time Geburtsjahr in Kategorie einteilen

skuki

Aktives Mitglied
Hallo,

beschäftige mich gerade mit dem Java 8 Feature java.time.

Mein Ziel wäre es ein Geburtsjahr in Senior, Erwachsen, Kind einzugrenzen. Leider finde ich mich hier noch überhaupt nicht zurecht.

Ich weis zwar wie man mittels <, > zwei LocalDates vergleichen kann, doch dies wären verschachtelte if's und das muss doch schöner gehen oder?

Könnte mir hier jemand helfen?
Vielen Dank!
 
Java:
   private static LocalDate date = LocalDate.now();
    date.getYear()

was anderes geht nich und dann halt switch

Java:
switch(date.getYear){
case 2015: dashiermachen
  break;
//und so weiter

}
 
Zuletzt bearbeitet:
Es gibt 2 ähnliche Funktionen die ich schreiben möchte.
Man kann sich das wie bei einem Ticketsystem vorstellen.

1. Man gibt sein Geburtsdatum ein. Das Programm bestimmt ob es sich um einen Senior, Erwachsenen oder ein Kind handelt. Hier gibt es bestimmte Stichtage. Könnte das jetzt natürlich mit getYear und dann < und > machen, dachte aber dass es hier vielleicht besser und einfacher geht.

2. Gibt es verschiedene Saisons. Daher muss bei der Ticketanforderung ein .now() gemacht werden um das aktuelle Datum zu erhalten. Jetzt möchte ich wieder wissen in welchem Quartal das ist.

Gibt es hier eine "einfache" Methode die ich noch nicht gefunden habe, oder muss man das wirklich mit if / else Zweigen hardcoden?

DANKE!

Edit:

Habe jetzt deinen Eintrag oben gesehen. Bei Switch kann ich jedoch kein >1970 ect. schreiben. da müsste ich davor wieder mit if/else Zweigen hantieren und dann eine Hilfsvariabel verwenden, was aber auch wieder unsinnig wäre.
 
Zuletzt bearbeitet:
Hier das gibt dir das Quatal zurück

Java:
import java.time.LocalDate;


public class Quatal {


    private static LocalDate date = LocalDate.now();
    
    //dabei ist 1 das erste Quatal und 4 das Letzte
    public static int getQuatal(){
        if(date.getMonth().getValue() <= 3){
            return 1;
        }else if(date.getMonth().getValue()  <= 6 && date.getMonth().getValue() > 3){
            return 2;
        }else if(date.getMonth().getValue()  <= 9 && date.getMonth().getValue() > 6){
            return 3;
        }else {
        return 4;
        }
    }
    
}
 
Zuletzt bearbeitet:
ja das schon aber du must ja trotz dem mit if arbeiten
is nichts anderes

> == isBefor
< == isAfter
= == isEquel
 
Zuletzt bearbeitet:
wenn du hart codierte jahreszahlen nimmst wird das nicht funktionieren. nimm anstelle davon das alter, und vergleiche es mit dem alter der Person, dann kannst du es länger laufen lassen, als wenn du sagst, alles vor 1950 ist senior, alles nach 2005 ist kind.
sag einfach alles >65 ist senior(if 1), alles <12 ist kind( else if) und der rest( else) ist der rest ;-)

so kannst du das programm auch noch in 20 jahren nutzen
 
Zuletzt bearbeitet:
Das Alter könntest du z.B. so ganz einfach rausbekommen:

Java:
		LocalDate today = LocalDate.now();
		LocalDate birthday = LocalDate.of(1969, Month.AUGUST, 17);
		Period period = Period.between(birthday, today);
		System.out.println(period.getYears());

Danach halt die IF-Abfragen für die Fallunterscheidung, sollte eigentlich kein Problem sein.
 
Vielen Dank für eure Beiträge.

Nur noch ergänzend.

> == isBefor
< == isAfter

stimmt so nicht. Wenn man den gleichen Tag vergleichen will muss man entweder noch mit isEqual arbeiten oder die Schranken -1 / +1 setzen.

LG
 
In diesem Fall ist das ineffizient
Du verwechselst "ineffizienz" mit "falscher Anwendung"
ein switch wie etwa:
Java:
switch(x) {
case 1: ... break;
case 2: ... break;
case 3: ... break;
...
}
ist effizienter als ein "äquivalentes" if-else
Java:
if(x==1) { ... }
else if(x==2) { ... }
else if(x==3) { ... }
...
In dem obigen Fall macht es halt bloß wenig sinn ein switch zu nutzen, da ein einfacher > Vergleich benötigt wird.
 

Neue Themen


Zurück
Oben