Erste Schritte DateTimeFormatter richtig anwenden

JanFausO

Mitglied
Hallo,
ich muss einen FestivalPlaner programmieren und habe das Problem, dass ich bei einer Klasse den DateTimeFormatter nicht richtig anwende, den Fehler aber leider nicht finde.
Sobald ich den Formatter anwende, übernimmt er mein Pattern nicht mehr.
Die Main Methode ist die folgende:

Java:
    public static void main(String[] args) {
        //Strings mit Start- und End-Zeit der Konzerte, später umwandeln in LocalDateTime
        String StartZeit1 = "09-08-2017 14:00";
        String EndZeit1 = "09-08-2017 15:30";
        String StartZeit2 = "09-08-2017 16:00";
        String EndZeit2 = "09-08-2017 17:30";
        String StartZeit3 = "09-08-2017 18:00";
        String EndZeit3 = "09-08-2017 19:30";
       
        //Pattern für den DateTimeFormatter
        String pattern = "dd-MM-yyyy HH:mm";   
        DateTimeFormatter Formatter = DateTimeFormatter.ofPattern(pattern);
       
       
        //Umwandlung der Strings in den Typ LocalDateTime
        LocalDateTime Beginn1 = LocalDateTime.parse(StartZeit1, Formatter);
        LocalDateTime Ende1 = LocalDateTime.parse(EndZeit1, Formatter);
        LocalDateTime Beginn2 = LocalDateTime.parse(StartZeit2, Formatter);
        LocalDateTime Ende2 = LocalDateTime.parse(EndZeit2, Formatter);
        LocalDateTime Beginn3 = LocalDateTime.parse(StartZeit3, Formatter);
        LocalDateTime Ende3 = LocalDateTime.parse(EndZeit3, Formatter);
        LocalDateTime Beginn4 = LocalDateTime.parse(StartZeit1, Formatter);
        LocalDateTime Ende4 = LocalDateTime.parse(EndZeit1, Formatter);
        LocalDateTime Beginn5 = LocalDateTime.parse(StartZeit1, Formatter);
        LocalDateTime Ende5 = LocalDateTime.parse(EndZeit1, Formatter);
       
       
        Performer Performer6 = new Performer("Die Ärzte", Kind.ROCK);
        Performer Performer7 = new Performer("Broilers", Kind.PUNK);
        Performer Performer8 = new Performer("Callejon", Kind.METAL);
        Performer Performer9 = new Performer("Ellie Goulding", Kind.POP);
        Performer Performer10 = new Performer("DJ Eddie Funk", Kind.FUNK);

       
        Appearance Appearance1 = new Appearance(Performer6, Stage.MainStage, 
                Beginn1, Ende1);
       
        Appearance Appearance2 = new Appearance(Performer7, Stage.MainStage, 
                Beginn2, Ende2);
       
        Appearance Appearance3 = new Appearance(Performer8, Stage.MainStage, 
                Beginn3, Ende3);
       
        Appearance Appearance4 = new Appearance(Performer9, Stage.SideStage, 
                Beginn4, Ende4);
       
        Appearance Appearance5 = new Appearance(Performer10, Stage.PartyTent, 
                Beginn5, Ende5);

        System.out.println(StartZeit1); //09-08-2017 14:00
        System.out.println(Beginn1);    //2017-08-09T14:00
        System.out.println(Appearance1);//2017-08-09T14:00 - 2017-08-09T15:30: Die Ärzte (ROCK) @ MainStage
        System.out.println(Appearance2);//2017-08-09T16:00 - 2017-08-09T17:30: Broilers (PUNK) @ MainStage
        System.out.println(Appearance3);//2017-08-09T18:00 - 2017-08-09T19:30: Callejon (METAL) @ MainStage
        System.out.println(Appearance4);//2017-08-09T14:00 - 2017-08-09T15:30: Ellie Goulding (POP) @ SideStage
        System.out.println(Appearance5);//2017-08-09T14:00 - 2017-08-09T15:30: DJ Eddie Funk (FUNK) @ PartyTent
    }


Die Ausgabe ist folgende und das Format sollte eigentlich überall wie die erste Ausgabe aussehen:

09-08-2017 14:00
2017-08-09T14:00
2017-08-09T14:00 - 2017-08-09T15:30: Die Ärzte (ROCK) @ MainStage
2017-08-09T16:00 - 2017-08-09T17:30: Broilers (PUNK) @ MainStage
2017-08-09T18:00 - 2017-08-09T19:30: Callejon (METAL) @ MainStage
2017-08-09T16:00 - 2017-08-09T17:30: Ellie Goulding (POP) @ SideStage
2017-08-09T16:00 - 2017-08-09T17:30: DJ Eddie Funk (FUNK) @ PartyTent
 
1. Bitte Java-Namenskonventionen lernen und Variablen klein schreiben.
2. Lernen wie man Arrays benutzt (Appearance[] statt mehrerer Appearance-Objekte).
3. Die Ausgabe ist offenbar das Ergebnis der toString()-Methode von deiner Appearance-Klasse. Wieso sollte diese Ausgabe den formatter verwenden?
 
1. Bitte Java-Namenskonventionen lernen und Variablen klein schreiben.
2. Lernen wie man Arrays benutzt (Appearance[] statt mehrerer Appearance-Objekte).
3. Die Ausgabe ist offenbar das Ergebnis der toString()-Methode von deiner Appearance-Klasse. Wieso sollte diese Ausgabe den formatter verwenden?

Die Objekte werden am Ende nicht in dieser Klasse erzeugt, das habe ich so nur gemacht um mein Problem zu verstehen. Wie bekomme ich das Problem jetzt aber gelöst, das meine toString-Methode das Datum so ausspuckt wie ich das möchte?!
Mein Problem ist, dass wenn ich das Datum mit dem DateTimeFormatter in einen String parse, das nicht mehr mit meiner Appearance-Klasse
public Appearance(Performer performer, Stage stage, LocalDateTime begin, LocalDateTime end)
zusammenarbeitet.
 
Dann musst du deiner Appearance-Klasse mitteilen, welches Format du zur Ausgabe der LocalDateTime-Instanzen verwenden möchtest. Dies könnte du z. B. über eine static Variable vom Typ DateTimeFormatter lösen, die über einen static setter gesetzt werden kann. "static" führt dazu, dass alle Instanzen einer Klasse eine Variable gemeinsam benutzen. Dieses Verhalten ist meistens unerwünscht, hier erscheint es mir aber statthaft.
 

Zurück
Oben