gregorian calender zu java.sql.timestamp problem

Status
Nicht offen für weitere Antworten.

jollyroger

Bekanntes Mitglied
Hallo,

da ich glaube das mein Problem für einen Profi ein leichtes ist, hab ich mal hierein gepostet.

Folgendes:

Ich werde noch wahnsinnig mit java.sql.date und gregorgian calender.

Im gregorianCalender steht ein Datum wie:

1111-11-11 11:11:11

So wenn ich nun das über jdbc in ein mysql timestamp feld so:

Code:
// die methode wandelt einen gregCalender in einen timestamp um
	public static Timestamp getDateAsTimeStamp(GregorianCalendar gregCal) {
		
		return new Timestamp( gregCal.YEAR, gregCal.MONTH, gregCal.DAY_OF_MONTH, gregCal.HOUR, gregCal.MINUTE, gregCal.SECOND, 0);
	}

// hier trage  ich das ein
// getGregCal() holt mir aus foo ein Gregorian Calender object

prepStatement.setTimestamp(1, getDateAsTimeStamp(foo.getGregCal()))

eintragen möchte, steht in der Datenbank das Datum:

1901-03-05 10:12:13

weil das wohl mit millisekunden nach 1970 gerechnet wird.

Wie schaffe ich es nun das wirklich der 1111-11-11 11:11:11 in der Datenbank steht und nicht das andere?

Ich probier schon seit Stunden rum und bin langsam echt am Verzweifeln........

Danke für jeden Tip!
 
wenn schon dann
return new Timestamp( gregCal.get(Calendar.YEAR)-1900, gregCal.get(Calendar.MONTH), ...);

die statischen Felder sind nur Indexe, enthalten nicht die aktuellen Werte

---------

einfacher ist aber
return new Timestamp(gregCal.getTimeInMillis());
 
Hallo und danke für die Antwort,

leider klappt es immer noch nicht so wie ich will...........

Die Funktion getDateAsTimeStamp sieht nun so aus:


Code:
	public Timestamp getDateAsTimeStamp(GregorianCalendar gregCal) {
		
		return new Timestamp(   gregCal.get(Calendar.YEAR) - 1900,
								gregCal.get(Calendar.MONTH), 
								gregCal.get(Calendar.DAY_OF_MONTH), 
								gregCal.get(Calendar.HOUR), 
								gregCal.get(Calendar.MINUTE), 
								gregCal.get(Calendar.SECOND), 0);
	}

Trage ich mit Hilfe dieser Funktion nun ein Objekt vom Typ

Code:
java.sql.Timestamp

in ein Timestamp-Feld meiner mysql-DB ein, steht nun leider statt

Code:
1111-11-11 11:11:11

ein

Code:
2012-03-11 11:11:11

Es muss doch irgendwie möglich sein, das da keine Umwandlung passiert, ich will einfach das gleiche Datum wie im GregorianCalender auch in der mysql-DB stehen haben.

Hab ich gerade Scheuklappen vor den Augen oder warum klappt das nicht?

Noch irgendwelche Tips?
 
> Hab ich gerade Scheuklappen vor den Augen oder warum klappt das nicht?

sone Fragen sollte man als Blinder/ nicht API-lesender/ nichts ausprobierender Anfänger nicht stellen,
das nervt ganz schön..

wenn du nix selber machst sondern nur andere fragst, dann rede bitte nicht so daher

---------

du fügst wahrscheinlich den Timestamp direkt in die DB ein?
mach doch erstmal einen Schritt nach dem anderen,
was kommt bei dir hier als Konsolenausgabe,

Code:
import java.sql.Timestamp;
import java.util.Calendar;
import java.util.GregorianCalendar;

public class Test {

	public static void main(String[] args) throws Exception {
		GregorianCalendar c =
			(GregorianCalendar) GregorianCalendar.getInstance();
		c.set(Calendar.YEAR, 1111);
		c.set(Calendar.MONTH, 11);
		c.set(Calendar.DAY_OF_MONTH, 11);
		c.set(Calendar.HOUR, 11);
		c.set(Calendar.MINUTE, 11);
		c.set(Calendar.SECOND, 11);
		Timestamp t = getDateAsTimeStamp(c);
		System.out.println(t);
	}

	public static Timestamp getDateAsTimeStamp(GregorianCalendar gregCal) {
		return new Timestamp(
			gregCal.get(Calendar.YEAR) - 1900,
			gregCal.get(Calendar.MONTH),
			gregCal.get(Calendar.DAY_OF_MONTH),
			gregCal.get(Calendar.HOUR),
			gregCal.get(Calendar.MINUTE),
			gregCal.get(Calendar.SECOND),
			0);
	}

}

bei mir
1111-11-11 11:11:11.0

also so wie du es willst?
der 11. Monat November ist übrigens intern Monat 10, da bei 0 zu zählen angefangen wird
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben