Date.getTime () дает время 2000 1 января - PullRequest
1 голос
/ 03 апреля 2012

Я наблюдал это необычное поведение на нескольких ноутбуках. У меня возникла проблема с приложением, которое мы разработали. При отладке мы обнаружили, что новый Date.getTime () указывает на старую дату. После этого мы попытались запустить небольшую программу на этих машинах. Ниже приведен код, который мы использовали.

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

Вывод будет похож на «946684800617», если несколько случаев. Когда мы увидели дату, она указывает на 1 января 2000 года и несколько миллисекунд. Это происходит не во всех ноутбуках.

Хотелось узнать, почему это происходит, чтобы мы могли поработать над этим.

PS: мы используем windows 7 (pro), Lenovo ThinkPad L420

1 Ответ

1 голос
/ 03 апреля 2012

Это не отвечает на ваш вопрос, но ваш код настолько сложен, что может иметь непредвиденные последствия.Можете ли вы попробовать запустить это, что делает то же самое?

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