2012-04-03 2 views
1

J'ai observé ce comportement inhabituel dans quelques ordinateurs portables. J'ai eu un problème en cours d'exécution dans l'application que nous avons développée. Lors du débogage, nous avons découvert que la nouvelle date.getTime() pointe vers une ancienne date. Après cela, nous avons essayé d'exécuter un petit programme sur ces machines. Ce qui suit est le code que nous avons utilisé.Date.getTime() donnant un temps de 2000 1er janvier

import java.util.Date; 
import java.util.concurrent.ConcurrentHashMap; 

public class Test { 

    public static void main(String... args) { 
     System.out.println(new Date().getTime()); 
     ConcurrentHashMap chm = new ConcurrentHashMap(); 

     for (int i = 0; i < 100000; i++) { 
      chm.put(i, new Date().getTime()); 

       if (Long.parseLong(String.valueOf(chm.get(i))) < 1332334082344l) { 
        System.out 
          .println(Long.parseLong(String.valueOf(chm.get(i)))); 
       } 



     } 

     System.out.println("dONE "+chm.size()+" "+chm.get(1000)); 
    } 
} 

La sortie est quelque chose comme "946684800617" si quelques cas. Quand nous avons vu la date il pointe au 1er janvier 2000 et quelques millisecondes. Cela n'arrive pas dans tous les ordinateurs portables.

Nous voulions savoir pourquoi cela se produisait afin que nous puissions travailler dessus.

PS: Nous utilisons Windows 7 (pro), Lenovo ThinkPad L420

+0

Quelle version de Java utilisez-vous? Les ordinateurs portables sur lesquels le problème se produit ont-ils une version différente des autres systèmes? – Jesper

+0

ils utilisent Java 1.6.0.22 .. tous utilisent le même Java – nandu

+0

Et quel est l'heure du système sur les ordinateurs portables? – oers

Répondre

1

Cela ne répond pas à votre question, mais un tel code est si complexe qu'il pourrait avoir des conséquences inattendues. Pouvez-vous essayer ce qui fait la même chose?

public class Test { 
    public static void main(String... args) { 
     int length = 100000; 
     System.out.println(System.currentTimeMillis()); 
     long[] times = new long[length]; 
     for (int i = 0; i < length; i++) { 
      times[i] = System.currentTimeMillis(); 
      if (times[i] < 1332334082344L) 
       System.out.println(times[i]); 
     } 
     System.out.println("Done " + times.length + " " + times[1000]); 
    } 
} 
+0

cela prendrait du temps .. vous le ferai savoir une fois que je le verrai Peter – nandu

+0

Ceci est pour s'assurer que ce n'est pas quelque chose de subtil dans la façon dont CHM, Date analyse, TimeZones etc fonctionne . –

Questions connexes