Time to long

Happyman0815

Mitglied
Hallo Leute!


Ich versuche derzeit einen Zeitpunkt in einen long Wert umzuwandeln nach dem Gregorian Kalender.
Ich habe einen Zeitpunkt im Format "2009-12-23 21-55-48.0" Dieses Format möchte ich umwandeln.

Wie funktioniert soetwas?

Sinn der Sache ist es ein Änderungsdatum einer Datei zu setzen. Das Format "2009-12-23 21-55-48.0" bekomme ich aus einer mySQL Datenbank. Dieses Datum soll nun eine Datei als Änderungsdatum erhalten.


Meine bisherige Konstruktion:
Java:
currentServerTime=getDatabaseServerTime();
			File fl_time = new File(guiClient.getWorkspace()+this.datParam_class.pfad + this.datParam_class.name); 
			//Date(int year, int month, int date, int hrs, int min, int sec) 
			
		       GregorianCalendar time = new GregorianCalendar(
				Integer.parseInt(currentServerTime.substring(0, 4)),
				Integer.parseInt(currentServerTime.substring(5, 7)),
				Integer.parseInt(currentServerTime.substring(8, 10)),   
				Integer.parseInt(currentServerTime.substring(11, 13)),
				Integer.parseInt(currentServerTime.substring(14, 16)),
				Integer.parseInt(currentServerTime.substring(17, 19)));
			 fl_time.setLastModified(time.getTimeInMillis());

currentServerTime beinhaltet das besagte Format aus der mySQL Datenbank.

Leider setzt meine bisherige Konstruktion den Zeitstempel immer um ca. 1 Jahr in die Zukunft. Woran liegt das??

Gruß
Happy
 
ca. 1 Jahr.., genauer geht es nicht?
bei mir kommt
Sat Jan 23 21:55:48 CET 2010
raus, also ein Monat in der Zukunft, nicht ein Jahr,

das liegt daran, dass Java Monate gerne im Format 0-11 annimmt, 0= Januar, 11 = Dezember,
die 12 aus deinem String wird dann als Januar des nächsten Jahres interpretiert 😉
 
Pseudo-Java (nicht getestet)
Sollte aber so in der Art gehen, vllt musst du nur die Parameter anpassen.
Java:
SimpleDateFormat df = new SimpleDateFormat("YYYY-MM-DD HH-mm-SS")
Date d = df.parse(currentServerTime)

Aber den Wert bekommst du von MySQL? Inwiefern? Per SQL? Dann sag doch einfach getDate() und lass dir ein Date-Objekt gehen, statt einem Sting?
 
Pseudo-Java (nicht getestet)
Sollte aber so in der Art gehen, vllt musst du nur die Parameter anpassen.
Java:
SimpleDateFormat df = new SimpleDateFormat("YYYY-MM-DD HH-mm-SS")
Date d = df.parse(currentServerTime)

Aber den Wert bekommst du von MySQL? Inwiefern? Per SQL? Dann sag doch einfach getDate() und lass dir ein Date-Objekt gehen, statt einem Sting?


Folgende Methode liefert leider nur das Datum und nicht die Zeit. Uhrzeit = 00-00-00
Java:
	static long getDatabesServerTime_long() {
		Statement st_time;
		ResultSet rs_time;
		try {
			st_time = cn.createStatement();
			rs_time = st_time.executeQuery("SELECT NOW()");
			rs_time.next();
		   
			return rs_time.getDate(1).getTime();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return 0;
	}
 
ein ResultSet hat ja nicht nur die Methode getDate(),
sondern auch eine get-Methode, die sich danach aus den Buchstaben e,i,m + T zusammensetzt,
bisschen ausprobieren, API lesen usw.

edit: zu spät 😉
 
ca. 1 Jahr.., genauer geht es nicht?
bei mir kommt
Sat Jan 23 21:55:48 CET 2010
raus, also ein Monat in der Zukunft, nicht ein Jahr,

das liegt daran, dass Java Monate gerne im Format 0-11 annimmt, 0= Januar, 11 = Dezember,
die 12 aus deinem String wird dann als Januar des nächsten Jahres interpretiert 😉

Du hast recht. Dann klappt es wohl mit folgender Funktion:
Java:
currentServerTime=getDatabesServerTime();
			File fl_time = new File(guiClient.getWorkspace()+this.datParam_class.pfad + this.datParam_class.name); 
			//Date(int year, int month, int date, int hrs, int min, int sec) 
			
		     GregorianCalendar time = new GregorianCalendar(
				Integer.parseInt(currentServerTime.substring(0, 4)),
				Integer.parseInt(currentServerTime.substring(5, 7))-1, //Monat-- :-)
				Integer.parseInt(currentServerTime.substring(8, 10)),   
				Integer.parseInt(currentServerTime.substring(11, 13)),
				Integer.parseInt(currentServerTime.substring(14, 16)),
				Integer.parseInt(currentServerTime.substring(17, 19)));
			 fl_time.setLastModified(time.getTimeInMillis());

Hab nur 2010 gelesen. Daher hab ich gesagt + 1 Jahr :toll:

Danke!
Happy
 
nachdem dies geklärt ist kann man nun dazu übergehen diesen schlimmen Code an sich abzulehnen,
SimpleDateFormat für String oder die höhere Methode aus dem ResultSet klingen viel besser

selbst wenn man bei diesem Code bleiben würde, könnte doch die Variable currentServerTime gekürzt werden,
auch eine HilfsMethode macht sich gut, so dass nur noch

GregorianCalendar time = new GregorianCalendar(
getSubInt(timeString, 0, 4),
getSubInt(timeString, 5, 7) - 1,
...
);
übrig bleibt
 
nachdem dies geklärt ist kann man nun dazu übergehen diesen schlimmen Code an sich abzulehnen,
SimpleDateFormat für String oder die höhere Methode aus dem ResultSet klingen viel besser

selbst wenn man bei diesem Code bleiben würde, könnte doch die Variable currentServerTime gekürzt werden,
auch eine HilfsMethode macht sich gut, so dass nur noch

GregorianCalendar time = new GregorianCalendar(
getSubInt(timeString, 0, 4),
getSubInt(timeString, 5, 7) - 1,
...
);
übrig bleibt

Java:
fl_time.setLastModified(rs.getTimestamp(1).getTime() );

:applaus:
 

Zurück
Oben