GregorianCalendar-Datum in

DirkHo

Erfahrenes Mitglied
Hi,

ich habe gerade folgendes Problem: Ich habe 2 Daten/Datums, diese sehen so aus:

Thu Dec 11 00:00:00 CET 2008 (vom Typ Date)
Mon Dec 08 21:17:50 CET 2008 (ebenfalls vom Typ Date, jedoch erzeugt aus dem GregorianCalendar).

Diese möchte ich nun gerne so aufbereiten, daß ich sie in der Datenbank speichern kann: YYYY-mm-dd h:i:s

Wie bekomme ich das denn bitte hin? Habe schon gegoogled, wie ich GregorianCalendar-Datum umwandeln kann, aber leider nichts gefunden :(

Danke und Grüße,

Dirk
 
Warum schreibst du dir keine einfache Methode dazu? Die macht immer genau das, was du ihr sagst. Hab dir mal was geschrieben, ist vielleicht nicht die schönste Methode, aber es geht sicher noch schlimmer, und sie tut wenigtens irgendwas.
Du musst eventuell in der privaten noch das erste Array anpassen, hab jetzt mal die britischen genommen, kP ob die amerikanischen anderst sind, hab auch 0 Schimmer von GregorianCalendar. Viel Spaß damit.

Java:
import java.util.GregorianCalendar;

import javax.swing.JOptionPane;

public class DateChange extends Object
{
	public DateChange()
	{
		super();
	}
	public static String dateChange(GregorianCalendar date)
	{
		String returnstring;
		String[] s = date.toString().split(" ");
		
		if(s.length != 6)
		{
			JOptionPane.showMessageDialog(null,
					"Parameterfehler in Methode 'dateChange'",
					"Fehelör!",
					JOptionPane.ERROR_MESSAGE);
			return(null);
		}
		
		s[1] = stringMonthToNumber(s[1]);
		returnstring = s[5] + "-" + s[1] + "-" + s[2] + " " + s[3];

		return(returnstring);
	}
	private static String stringMonthToNumber(String s)
	{
		String[] stringDate = {
				"Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"
		};
		String[] numberDate = {
				"01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"
		};
		
		if(stringDate.length != numberDate.length)
		{
			JOptionPane.showMessageDialog(null,
					"Arrayfehler in Methode 'stringMonthToNumber'",
					"Fehlaria! O_O",
					JOptionPane.ERROR_MESSAGE);
			return(s);
		}
		
		for(int i = 0; i < stringDate.length; i++)
			s = s.replace(stringDate[i], numberDate[i]);
		return(s);
	}
}
 
oder so:

Java:
SimpleDateFormat df = new SimpleDateFormat("dd.mm.yyyy HH:mm");
String s = df.format(new Date());
//oder bzw:
Date d = df.parse("08.12.2008 23:08")

In Kai008's Beispiel, geht er immer vom gleichen Datum-Format aus.
Das wird in einer anderen Locale Probleme geben.
(Außerdem kann man sich so ca. ~50 Zeilen Code sparen ;) ....)

Edit:
Datum umwandeln...
Das Datum wird übrigens nicht umgewandelt oder geändert!
Nur die Darstellung ändert sich.
 
Zuletzt bearbeitet:
Warum willst du das Datumsformat ändern?

Mit nem PreparedStatement übernimmt mir das Umformatieren für die Datenbank Java selbst (bzw. die benutzten DB Library).

Ansonsten ist natürlich benhazes Vorschlag die Wahl unter Java.

Nur sei gesagt, dass es immer vom Zeitzonen-Offset des Rechners ausgeht. (das meinte benzhas mit Locale).

Daher wenn der Datums-String in einer anderen Zeitzone sein soll, musst du noch die Zeitzone mittels setTimezone setzen. Oder du setzt gleich das Calendar Objekt als Input. Dann werden die Einstellungen von diesem zum formatieren benutzt (siehe API)
 
Hallo,

danke erstmal für eure Antworten!

Problem ist bei dem SimpleDateFormat nur, daß es mir ja nur Strings in mein gewünschtes Datumsformat umwandelt, nicht aber Werte vom Typ Date.

Und zwar habe ich ein RichFaces-Formular (genauer gesagt einen Kalender), der mir zwar in dem zugehörigen Input-Feld das Datum als YYYY-mm-dd anzeigt, in das Attribut meines Objekts (kunde.geburtsDatum) schreibt er dann aber das Format, wie ich es oben eingegeben habe.

"Natürlich" kann ich es auch so in die DB schreiben, aber wenn ich es dann auslese kapiert das ja keiner bzw. wenn es direkt nach der Auswahl wieder ausgegeben wird, dann würde ich mir das schon gerne in deutschem Format anzeigen lassen, also

dd.mm.YYYY h:i:s (ok, bei Geburtsdatum natürlich nur dd.mm.YYYY - habe aber auch andere Datums oder Daten, die eben noch die Zeit dazu brauchen).

und in die DB

YYYY-mm-dd h:i:s (das gleiche wie oben mit der Zeit)

Kann ich das irgendwie direkt aus dem Date heraus ändern?

Danke und Grüße,

Dirk
 
Hallo,

danke erstmal für eure Antworten!

Problem ist bei dem SimpleDateFormat nur, daß es mir ja nur Strings in mein gewünschtes Datumsformat umwandelt, nicht aber Werte vom Typ Date.
Nein,

Ein SimpleDateFormat wandelt ein java.util.Date Objekt in ein Datum-String oder einen Datum-String in ein Date-Objekt.

Siehe Post von Benhaze
 
Hi,

danke für die Antwort. Schade, dann werde ich weitersuchen, wie ich das am besten hinbekomme...

Danke und Grüße,

Dirk
 
Schade, dann werde ich weitersuchen
wie meinste das....*schade*?!

Java:
SimpleDateFormat df = new SimpleDateFormat("dd.mm.yyyy HH:mm");
String s = df.format(new Date());
//oder bzw:
Date d = df.parse("08.12.2008 23:08")

mit SimpleDateFormat kannst du:

- einen String in ein Date umwandeln (Zeile 4)
- ein Date in ein String umwandeln (Zeile 2)

Was willst du noch?
 
Zuletzt bearbeitet:
Zurück