Rückgabe-Array lässt sich nicht auslesen, LocalDate mit String

Sherry

Aktives Mitglied
Hallo,

ich möchte org.joda.time.LocalDate ein Datum übergeben, das ich als String z.B. "20.10.2014" aus einem JTextField erhalte. Da der Konstruktor von LocalDate so aussieht

LocalDate(int year, int monthOfYear, int dayOfMonth)

habe ich mir überlegt, den String in die Teile Jahr, Monat und Tag zu zerlegen. Ich versuche das mit einer Methode zu machen, die dann ein Array als Rückgabewert liefert.
Java:
 * DateDisassembler.java
package com.example;

public class DateDisassembler {
    /**
     * @param date
     * The parameter date will disassemble to day(0), to month(1) and to year(2). 
     * It returns an array variable that contains these three values​​.
     */
    @SuppressWarnings("null")
    public int[] disassemble(String date) {
        int dateShare[] = {1,2,3};
        String delimiter = ".";    
        dateShare[0] = Integer.parseInt(StringUtils.substringBefore(date, delimiter));
        dateShare[1] = Integer.parseInt(StringUtils.substringBefore(StringUtils.substringAfter(date, delimiter), delimiter));
        dateShare[2] = Integer.parseInt(StringUtils.substringAfter(StringUtils.substringAfter(date, delimiter),delimiter));
        return dateShare;        
    }
}

und als Main-Klasse
Java:
package com.example;

public class TestDisassembler {

    public static void main(String[] args) {
        String date = "12.10.2014";
        
        DateDisassembler d = new DateDisassembler();
        int[] dateShare = {};
        dateShare[0] = d.disassemble(date);
        dateShare[1] = d.disassemble(date);
        dateShare[2] = d.disassemble(date);
        System.out.println("Tag   : " + dateShare[0]);
        System.out.println("Monat : " + dateShare[1]);
        System.out.println("Jahr  : " + dateShare[2]);
    }
}
Die Feldvariablen dateShare[..] will ich an die äquivalenten Parameter von LocalDate einfügen.
Mit dieser Konstellation erhalte ich folgenden Stack-Trace
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Type mismatch: cannot convert from int[] to int
Type mismatch: cannot convert from int[] to int
Type mismatch: cannot convert from int[] to int

at com.excample.TestDisassembler.main(TestDisassembler.java:11)

Eigentlich will ich das zurückgegebene Array in die dazugehörigen Einzelteile zerlegen. Irgendwie habe ich hier noch einen Denkfehler. Bzw. mich interessiert auch, ob eine Möglichkeit gibt, LocalDate direkt ein Datum als String zu übergeben, dann wäre diese Methode überflüssig.

Grüße
Sherry
 
Zuletzt bearbeitet von einem Moderator:
Okay, ich habe das Problem gelöst
Code:
int day = d.disassemble(date)[0];
int month = d.disassemble(date)[1];
int year = d.disassemble(date)[2];

Aber die Frage nach der Eingabemöglichkeit eines Strings direkt in LocalDate interessiert mich immer noch.
 
Die Methode d.disassemble(date) in der Klasse DateDisassembler liefert ein intARRAY zurück, welches Du hier

Code:
dateShare[0] = d.disassemble(date);
dateShare[1] = d.disassemble(date);
dateShare[2] = d.disassemble(date);

jeweils den int-Werten dateShare[0], dateShare[1] und dateShare[2] zuweisen willst.
Dies müsste sich, wenn das Ergebnis dann noch stimmt, wie folgt umgehen lassen:

Code:
dateShare[0] = d.disassemble(date)[0];
dateShare[1] = d.disassemble(date)[1];
dateShare[2] = d.disassemble(date)[2];
 
Bitte die Java-Tags verwenden statt den Code-Tags! 🙂

habe ich mir überlegt, den String in die Teile Jahr, Monat und Tag zu zerlegen. Ich versuche das mit einer Methode zu machen, die dann ein Array als Rückgabewert liefert.

Code:
		DateDisassembler d = new DateDisassembler();
		int[] dateShare = {};
		dateShare[0] = d.disassemble(date);
		dateShare[1] = d.disassemble(date);
		dateShare[2] = d.disassemble(date);
		System.out.println("Tag   : " + dateShare[0]);
		System.out.println("Monat : " + dateShare[1]);
		System.out.println("Jahr  : " + dateShare[2]);

Eigentlich will ich das zurückgegebene Array in die dazugehörigen Einzelteile zerlegen. Irgendwie habe ich hier noch einen Denkfehler. Bzw. mich interessiert auch, ob eine Möglichkeit gibt, LocalDate direkt ein Datum als String zu übergeben, dann wäre diese Methode überflüssig.

Gut dein Gedanke war, den String zu zerlegen und ein Array als Rückgabewert zu liefern.
Das Problem ist aber du willst den Rückgabewert deiner Methode "disassemble" (ein int[]) einem bestimmten Index eines int[] zuweisen.

Warum nicht einfach
Java:
int dateShare = d.disassemble(date);
?

@shams
dein Code stimmt zwar auch, aber der Nachteil ist das die Methode 3x ausgeführt wird (3fache Laufzeit) und du nicht sicher gehen kannst das sie immer das gleiche Ergebnis liefert.
 
Zuletzt bearbeitet:

Zurück
Oben