2008-09-16 11 views
5

Kann nicht verstehen, warum die folgenden stattfindet:Date.getTime() ohne Uhrzeit?

String date = "06-04-2007 07:05"; 
SimpleDateFormat fmt = new SimpleDateFormat("MM-dd-yyyy HH:mm"); 
Date myDate = fmt.parse(date); 

System.out.println(myDate); //Mon Jun 04 07:05:00 EDT 2007 
long timestamp = myDate.getTime(); 
System.out.println(timestamp); //1180955100000 -- where are the milliseconds? 

// on the other hand... 

myDate = new Date(); 
System.out.println(myDate); //Tue Sep 16 13:02:44 EDT 2008 
timestamp = myDate.getTime(); 
System.out.println(timestamp); //1221584564703 -- why, oh, why? 
+0

Es gibt auch keine Sekunden, weil Sie keine im Datum angegeben haben! –

+0

Uhm, ich sehe sie dort, die letzten drei Nullen. Sie haben sie implizit auf 0 gesetzt. –

Antwort

20

Welche Millisekunden? Sie geben im ersten Beispiel nur Minuteninformationen an, während Ihr zweites Beispiel das aktuelle Datum aus dem System mit Millisekunden abruft, wonach suchen Sie?

String date = "06-04-2007 07:05:00.999"; 
SimpleDateFormat fmt = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss.S"); 
Date myDate = fmt.parse(date); 

System.out.println(myDate); 
long timestamp = myDate.getTime(); 
System.out.println(timestamp); 
+0

Es gibt auch keine Sekunden oder Minuten oder Stunden! getTime() gibt nur die lange ganze Zahl zurück, die das Datum von der Zeit 00:00:00 darstellt. Es gibt keine Möglichkeit, Sekunden zu analysieren: Sie sind einfach nicht in meinen Daten vorhanden. =) – Jake

+1

Warum öffnest du keine neue Frage mit deinem tatsächlichen Code und ein wenig Beispieldaten, wenn das deine Zweifel nicht gelöst hat? Ich nehme an, dein Problem könnte woanders liegen. –

+0

1180955100000 enthält eine Stunde und eine Minute Komponente, wie zu erwarten wäre. Du solltest Vinkos Antwort akzeptieren. – ScArcher2

2

stimme mit oben überein, es sollte keine Millisekunden geben. . .

2

Weil das angegebene einfache Datumsformat die Millisekunden verwirft. Das resultierende Date-Objekt verfügt also nicht über diese Information. Also, wenn Sie es ausdrucken, sind alle 0s.

Auf der anderen Seite behält das Date-Objekt die Millisekunden, wenn Sie ihm einen Wert mit Millisekunden zuweisen (in diesem Fall mit dem neuen Date()). Wenn Sie sie ausdrucken, enthält sie auch die Millisekunden.

0

Wenn Sie ein Datum analysieren, werden nur die von Ihnen angegebenen Informationen verwendet. In diesem Fall weiß nur MM-TT-JJJJ HH: mm.

Das Erstellen eines neuen Datumsobjekts gibt das aktuelle Systemdatum zurück (Anzahl der Millisekunden seit der Epoche).

0

toString() eines Date-Objekts nicht zeigen Ihnen die Millisekunden ... Aber sie sind da

So new Date() ist ein Objekt mit milisecond Auflösung kann wie zu sehen:

System.out.printf("ms = %d\n", myDate.getTime() % 1000) ; 

wenn Sie jedoch Ihr Datum mit Simple konstruieren, werden keine Millisekunden an sie übergeben

Bin ich hier die Frage fehlt?

[Bearbeiten] Hahaha ... viel zu langsam;)

0

date.getTime gibt die Anzahl der Millisekunden seit dem 1. Januar 1970, 00:00:00 GMT durch das Date-Objekt repräsentiert. So "06-04-2007 07:05" - "01-01-1970 00:00" entspricht 1180955340000 Millisekunden. Da das einzige Problem Ihrer Frage der Zeitanteil des Datums ist, ist eine grobe Vorstellung von dieser Berechnung die Anzahl der Millisekunden zwischen 07:05 und 00:00, also 25500000. Dies ist durch beide Zeiten nicht durch 1000 teilbar hat irgendwelche Millisekunden.

Im zweiten Datum verwendet es die aktuelle Zeit, wenn diese Codezeile ausgeführt wird. Das wird verwenden, was auch immer die aktuellen Millisekunden nach der aktuellen Sekunde in der Berechnung sind. Daher wird Date.getTime höchstwahrscheinlich eine Zahl zurückgeben, die nicht durch 1000 teilbar ist.

0

Die getTime()-Methode von Date gibt die Anzahl der Millisekunden seit dem 1. Januar 1970 zurück (dieses Datum wird als "Epoche" bezeichnet, weil alle) Computerdaten basieren auf diesem Datum). Es sollte nicht verwendet werden, um eine menschenlesbare Version Ihres Datums anzuzeigen.

Verwenden Sie stattdessen die Methode SimpleDateFormat.format().Hier ist eine überarbeitete Version des Teils des Codes, die ich denke, Ihr Problem lösen kann:

String date = "06-04-2007 07:05:23:123"; 
SimpleDateFormat fmt = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss:S"); 
Date myDate = fmt.parse(date); 

System.out.println(myDate); //Mon Jun 04 07:05:23 EDT 2007 
String formattedDate = fmt.format(myDate); 
System.out.println(formattedDate); //06-04-2007 07:05:23:123 
2

Statt die Sun JDK Zeit/Datum-Bibliotheken verwenden (die viel zu wünschen übrig lassen) Ich empfehle einen Blick auf http://joda-time.sourceforge.net nehmen .

Dies ist ein sehr reifes und aktives Sourceforge-Projekt und hat eine sehr elegante API.

0
import java.util.*; 

public class Time { 
    public static void main(String[] args) { 
     Long l = 0L; 
     Calendar c = Calendar.getInstance(); 
     //milli sec part of current time 
     l = c.getTimeInMillis() % 1000; 
     //current time without millisec 
     StringBuffer sb = new StringBuffer(c.getTime().toString()); 
     //millisec in string 
     String s = ":" + l.toString(); 
     //insert at right place 
     sb.insert(19, s); 
     //ENJOY 
     System.out.println(sb); 
    } 
}