Datum + Uhrzeit in Millisekunden (long) umwandeln

Kumaro

Mitglied
HI, ich hab mal wieder ein kleines Problem.

Eigentlich erschien es sehr einfach doch anscheinend ist es das doch nicht, oder ich seh den Wald vor lauter Bäumen nicht mehr ^^.

Ich hab einen String "Datum" und einen String "Uhrzeit" und will diese angaben in long (also die millisekunden) umwandeln.

Habe das wie folgt gemacht:

Java:
                          long a = timeInMilis("25.02.2012", "10:00:00");
		long b = timeInMilis("25.02.2012", "12:26:00");
		long c = timeInMilis("26.02.2012", "12:26:00");


Ausgabe:

1330124400000
1330124400000
1330210800000


Java:
private static long timeInMilis(String date, String time) throws ParseException {
DateFormat formatter = new SimpleDateFormat("dd.MM.yyyy");
	
Date datum = (Date) formatter.parse(date);
long timestamp = datum.getTime();

return timestamp;

Irgendwie scheint er die Uhrzeit nicht zu berücksichtigen. Denn eigentlich sollten die Timestamps von a und b doch auch unterschiedlich sein.

Was mach ich falsch?

Ich hoffe ihr könnt mir helfen.

Viele Grüße
Kumaro
 
Zuletzt bearbeitet:
Hab jetzt doch noch was gefunden. Ich versteh nur leider nicht genau wozu das alles sein muss:

Java:
public static long timeInMilis(String date, String time) {
	TString sd = new TString(date, '.');
	TString st = new TString(time, ':');
	Calendar c = Calendar.getInstance();
	int day = Integer.valueOf(sd.getStrAt(0));
	int month = Integer.valueOf(sd.getStrAt(1))-1;
	int year = Integer.valueOf(sd.getStrAt(2));
	int h = Integer.valueOf(st.getStrAt(0));
	int m = Integer.valueOf(st.getStrAt(1));
	int s = Integer.valueOf(st.getStrAt(2));
	c.set(year, month, day, h, m, s);
return c.getTimeInMillis();
}
 
Die Uhrzeit wird nicht beachtet, weil sie eben nicht verarbeitet wird. Du parst lediglich das Datum, aber nicht die Uhrzeit, deswegen ist sie auch gar nicht im Timestamp vorhanden.

Und in der zweiten Variante wird das alles von Hand gemacht, deswegen sieht das nach so viel aus. Ist aber an sich ziemlich wenig.
 
Die Methode parse() in der Klasse SimpleDateFormat kann auch Timestamps parsen, damit kann man sich die vielen Setter ersparen. Will man nun die Millis ausgeben, muss man in der Instanz die Methode getTime() aufrufen, da ansonsten toString() das Datum mit der Uhrzeit ausgibt. Hier ein Beispiel:

Code:
		java.util.Date parsedDate1 = null;
		java.util.Date parsedDate2 = null;
		
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
		try {
		parsedDate1 = dateFormat.parse("2006-05-22 14:04:55.612");
		parsedDate2 = dateFormat.parse("2006-05-22 14:04:55.614");
		} catch (Exception e) {
			e.printStackTrace();
		}
				System.out.println("parsedDate1: " + parsedDate1.getTime());
		System.out.println("parsedDate2: " + parsedDate2.getTime());;

Und der Output lautet:

parsedDate1: 1148299495612
parsedDate2: 1148299495614

Ein Long im Date repräsentiert die Anzahl Millisekunden seit dem 1. Januar 1970 bis Date. Ist Date kleiner als 1. Jan. 1970 wird Long negativ.
 
Zuletzt bearbeitet:
Hallo,
ich bin gerade an diesem Problem am beißen und finde keine Lösung.
Kurz gesagt *.getTime funktioniert nicht, wenn die übergebene Zeit in der 12ten Stunde des Tages liegt, dann bricht getTime ab und schreibt am Ende nur Nullen.
Auch wenn ich das Format nach HH:mm ändere.
Kann mir da jemand helfen?
Gruß Jörg
 
Moin,

Kurz gesagt *.getTime funktioniert nicht, wenn die übergebene Zeit in der 12ten Stunde des Tages liegt, dann bricht getTime ab und schreibt am Ende nur Nullen.
Auch wenn ich das Format nach HH:mm ändere.
hmm, kann ich nicht bestätigen!

Java:
        java.util.Date parsedDate1 = null;
        java.util.Date parsedDate2 = null;
        SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd hh:mm:ss.SSS" );
        try
        {
            parsedDate1 = dateFormat.parse( "2016-05-22 12:04:55.612" );
            parsedDate2 = dateFormat.parse( "2016-05-22 12:04:55.620" );
        }
        catch( Exception e )
        {
        e.printStackTrace();
        }
        System.out.println( "parsedDate1: " + parsedDate1.getTime() + " # " + parsedDate1 );
        System.out.println( "parsedDate2: " + parsedDate2.getTime() + " # " + parsedDate2 );
liefert mir:
parsedDate1: 1463868295612 # Sun May 22 00:04:55 CEST 2016
parsedDate2: 1463868295620 # Sun May 22 00:04:55 CEST 2016

Welche Java-Version nutzt Du überhaupt?
Schon mal Joda-Time versucht?? (www.joda.org/joda-time/)
Ist zumindest um Längen besser als die Zeitfunktione bei Java7 !!

Gruß Klaus
 
Zuletzt bearbeitet:
Vielen Dank für Deine Mühen.
Na super ...
Ich sitze im Büro, RedHat Linux Java Version 1.7.0, dann wird es wohl daran liegen.
Joda kenne ich nicht und ich darf hier auch nichts installieren, ich muß das also mit Boardmitteln hinbekommen :-(((
Gruß Jörg
 
Das hatte ich gelesen. "H" und "HH", hat beides keine Änderung gebracht. Auch "k" hatte ich probiert, soll bei 24 Stunden Uhr funktionieren, brachte aber einen Fehler.
Gruß Jörg
 
Moin,

als mit
Java:
java.util.Date parsedDate1 = null;
        java.util.Date parsedDate2 = null;
        SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss.SSS" );  // !!!
        try
        {
            parsedDate1 = dateFormat.parse( "2016-05-22 11:59:59.999" );
            parsedDate2 = dateFormat.parse( "2016-05-22 12:00:00.000" );
        }
        catch( Exception e )
        {
        e.printStackTrace();
        }
        System.out.println( "parsedDate1: " + parsedDate1.getTime() + " # " + parsedDate1 );
        System.out.println( "parsedDate2: " + parsedDate2.getTime() + " # " + parsedDate2 );
bekomme ich korrekte Anzeigen
Sun May 22 11:59:59 CEST 2016
Sun May 22 12:00:00 CEST 2016

gruß Klaus
 

Neue Beiträge

Zurück