Frage

Kann nicht verstehen, warum die folgenden stattfindet:

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?
War es hilfreich?

Lösung

Was Millisekunden? Sie sind im ersten Beispiel nur wenige Minuten Informationen, während Ihr zweites Beispiel der aktuelle Datum aus dem System mit Millisekunden packt, was es ist, die Sie suchen?

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);

Andere Tipps

mit oben einverstanden sind, es keine Millisekunden sein sollte. . .

Da einfachen Datumsformat Sie verwirft die Millisekunden angegeben. So ist das resultierende Date-Objekt nicht über diese Informationen. Also, wenn Sie es aus, seine alle 0s drucken.

Auf der anderen Seite, das Date-Objekt hat die Millisekunden beibehalten, wenn Sie einen Wert mit Millisekunden zuweisen (in diesem Fall neues Datum mit ()). Also, wenn Sie drucken sie aus, es enthält die millisecs zu.

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 .

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

Wenn Sie ein Datum parsen es verwendet nur die Informationen, die Sie. In diesem Fall kennt es nur HH MM-TT-JJJJ: mm

.

ein neues Date-Objekt erstellen gibt die aktuelle Systemdatum / Zeit (Anzahl der Millisekunden seit Beginn der Epoche).

toString () ein Date-Objekts nicht zeigt 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 die Frage fehlt hier?

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

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" ist gleich 1180955340000 Millisekunden. Da die einzige Sorge Ihrer Frage nach dem Zeitpunkt des Datums ist, ist eine grobe Denkweise dieser Berechnung die Anzahl der Millisekunden von 7.05 bis 00.00 Uhr, die 25500000. teilbar Dies ist gleichmäßig von 1000, da weder Zeit hat keine Millisekunden.

Im zweiten Datum verwendet es die aktuelle Uhrzeit, wenn diese Codezeile ausgeführt wird. Das wird verwenden, was die aktuellen Millisekunden hinter dem aktuellen zweiten Platz in der Berechnung sind. Daher wird date.getTime mehr als wahrscheinlich eine Zahl zurück, die von 1000 nicht teilbar ist.

Die getTime() Methode des Date gibt die Anzahl der Millisekunden seit dem 1. Januar 1970 (das Datum der „Epoche“ genannt wird, weil alle Computer Daten dieses Datums aus basieren). Es sollte nicht verwendet werden, um eine menschenlesbare Version Ihres Datum angezeigt werden soll.

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

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
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);
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top