Question

Je ne comprends pas pourquoi cela se produit:

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?
Était-ce utile?

La solution

Quelles millisecondes? Dans le premier exemple, vous ne fournissez que des informations sur les minutes, alors que le second exemple saisit la date du système en millisecondes, que cherchez-vous?

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

Autres conseils

Je suis d'accord avec ce qui précède, il ne devrait pas y avoir de millisecondes. . .

Parce que le format de date simple que vous avez spécifié supprime les millisecondes. Donc, l'objet Date résultant n'a pas cette information. Ainsi, lorsque vous l'imprimez, tous les 0 sont remplis.

D'autre part, l'objet Date conserve les millisecondes lorsque vous lui attribuez une valeur exprimée en millisecondes (dans ce cas, utilisez new Date ()). Ainsi, lorsque vous les imprimez, il contient également les millisecondes.

Au lieu d'utiliser les bibliothèques Sun JDK Time / Date (qui laissent beaucoup à désirer), je vous recommande de consulter http://joda-time.sourceforge.net .

Il s'agit d'un projet sourceforge très mature et actif, doté d'une API très élégante.

Lorsque vous analysez une date, elle utilise uniquement les informations que vous fournissez. Dans ce cas, il ne connaît que MM-jj-aaaa HH: mm.

La création d'un nouvel objet de date renvoie la date / heure système actuelle (nombre de millisecondes depuis l'époque).

toString () d'un objet Date ne vous montre pas les millisecondes ... mais elles sont là

Donc new Date () est un objet avec une résolution en millisecondes, comme on peut le voir par:

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

Toutefois, lorsque vous construisez votre date avec SimpleDateFormat, aucune milliseconde ne lui est transmise

Est-ce que je manque la question ici?

[modifier] Hahaha ... beaucoup trop lent;)

Date.getTime renvoie le nombre de millisecondes écoulées depuis le 1er janvier 1970, 00:00:00 GMT, représenté par l'objet Date. So "06-04-2007 07: 05" - "01-01-1970 00: 00" est égal à 1180955340000 millisecondes. Étant donné que votre question ne concerne que la partie heure de la date, une méthode approximative de calcul est le nombre de millisecondes entre 07h05 et 00h00, ce qui correspond à 25500000. Ceci est également divisible par 1000 car aucune heure a des millisecondes.

À la deuxième date, il utilise l'heure actuelle à laquelle cette ligne de code est exécutée. Cela utilisera ce que les millisecondes actuelles au-delà de la seconde actuelle sont dans le calcul. Par conséquent, Date.getTime retournera plus que probablement un nombre qui n’est pas divisible par 1 000.

La méthode getTime () de Date renvoie le nombre de millisecondes depuis le 1er janvier 1970 (cette date est appelée "epoch", car toutes les dates informatiques sont basées sur hors de cette date). non doit être utilisé pour afficher une version lisible de votre date par une personne.

Utilisez plutôt la méthode SimpleDateFormat.format () . Voici une version révisée d'une partie de votre code qui, à mon avis, pourrait résoudre votre problème:

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);
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top