java - Date.getTime () giver en tid for 2000 1. januar

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har observeret denne usædvanlige opførsel i nogle få bærbare computere. Jeg havde et problem i applikationen vi udviklede. Ved debugging fandt vi, at den nye Date.getTime () peger på en gammel dato. Derefter forsøgte vi at køre et lille program på disse maskiner. Følgende er den kode, vi brugte.


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


Udgangen er noget som '946684800617' hvis et par tilfælde. Da vi så datoen, peger den til 1. januar 2000 og nogle millisekunder. Dette sker ikke i alle bærbare computere.


Ønskede at vide, hvorfor dette sker, så vi kan arbejde over det.


PS: Vi bruger Windows 7 (pro), Lenovo ThinkPad L420

Bedste reference


Dette svarer ikke på dit spørgsmål en sådan, men din kode er så kompleks, at den kan have utilsigtede konsekvenser. Kan du prøve at køre det, hvilket gør det samme?


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