Datumskonvertierung

M

Morgaine1988

Gast
Hallo zusammen,

ich habe ein merkwürdiges Problem. Und zwar bekomme ich auf manchen PCs folgende Fehlermeldung:

Java:
java.lang.IllegalArgumentException
        at java.sql.Date.valueOf(Unknown Source)
        at PListe_Reporting.ReportsSchreiben(PListe_Reporting.java:494)
        at PListe_Reporting.main(PListe_Reporting.java:69)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa
der.java:56)

Bei einigen PCs funktioniert es bei manchen nicht.

Das ist die Codestelle wo der Fehler ensteht.

[Java] calendar2.setTime(java.sql.Date.valueOf(Integer.parseInt(a[3].substring(6,10)) + "-" +
Integer.parseInt(a[3].substring(3,5))+ "-" + Integer.parseInt(a[3].substring(0, 2))));[\JAVA]
 
M

Morgaine1988

Gast
[Java] calendar2.setTime(java.sql.Date.valueOf(Integer.parseInt(a[3].substring(6,10)) + "-" +
Integer.parseInt(a[3].substring(3,5))+ "-" + Integer.parseInt(a[3].substring(0, 2))));[/Java]

ist doch ein String. Außerdem erklärt das nicht warum es bei 3 von 7 PC funktioniert.

lg
 

VfL_Freak

Top Contributor
Moin,

[Java] calendar2.setTime(java.sql.Date.valueOf(Integer.parseInt(a[3].substring(6,10)) + "-" +
Integer.parseInt(a[3].substring(3,5))+ "-" + Integer.parseInt(a[3].substring(0, 2))));
[/Java]
ist doch ein String.

Nö, Du parst mit "Integer.parseInt" den enstprechenden Substring und bekommst einen Integer zurück !!
java-forum.org

Die Fehlermeldung ist da eindeutig - mal davon abgesehen, dass ich nicht sehe, was genau eigentlich Dein Array 'a' ist!

Außerdem erklärt das nicht warum es bei 3 von 7 PC funktioniert.
Und bei den anderen PCs wird das Datum korrekt gesetzt ???:L
Oder laufen vlt. gar nicht durch diesen Code ???:L

Gruß
Klaus
 

r.w.

Bekanntes Mitglied
Hallo Morgaine1988,

...ist doch ein String. Außerdem erklärt das nicht warum es bei 3 von 7 PC funktioniert...


Zu Date.valueOf steht in der Doku

Throws:
IllegalArgumentException - if the date given is not in the JDBC date escape format (yyyy-[m]m-[d]d)

Da der Fehler offensichtlich hier auftritt, würde ich mir jetzt den Parameter
auf den unterschiedlichen PCs ausgeben lassen und vergleichen.

VG ROlf
 
S

SlaterB

Gast
bei solchen Monsterzeilen hat man aber auch wirklich selber schuld,
man kann doch zivilisiert

Java:
String jahrSt = substring ..
int jahr = parse ..;
...
...
...
..
String gesamt = jahr + "-" + ..
java.sql.Date d = java.sql.Date.valueOf(gesamt);
calendar2.setTime(d);
usw. schreiben, dann hat man auch genug Zwischenvariablen direkt anzuschauen
 
M

Morgaine1988

Gast
Hallo zusammen,

ich hab die Lösung gefunden. Wenn man einen älteren jdk als 1.5 hat dann mussten alle Parameter 2 bei Date.valueof 2-Stellig sein. Also 01 statt 1.

lg
Denise
 
S

SlaterB

Gast
strenggenommen muss man sich einfach an die Bedingung in der API halten, yyyy-mm-dd,
dann kann nichts schiefgehen ;)

eine solche Implementierungsänderung ist aber schon ein Ärgernis
 

r.w.

Bekanntes Mitglied
...
eine solche Implementierungsänderung ist aber schon ein Ärgernis


Vor Allem, wenn es in der aktuellen API (ohne Hinweis auf frühere Implementierungen) explizit erlaubt wird:

Parameters:
s - a String object representing a date in in the format "yyyy-[m]m-[d]d". The leading zero for mm and dd may also be omitted.

Obwohl ich selbst wohl nicht auf die Idee gekommen wäre, hier ohne führende Nullen zu arbeiten.
Einfach aus Gewohnheit, weil die auch bei anderen Gelegenheiten ganz nützlich sind. ;-)

VG ROlf
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Datumskonvertierung Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben