Слишком большая разница во времени в миллисекундах с календарем - PullRequest
1 голос
/ 29 ноября 2011

Я пытаюсь сравнить две миллисекундные значения в Java. Один из календаря и один из System.currentTimeMillis(). Однако, кажется, что значение из календаря всегда намного больше, чем значение из System.currentTimeMillis() в правильное время.

Чтобы построить календарь, я анализирую строку даты в формате dd/MM/yyyy HH:mm и помещаю ее составляющие в календарь (try-catch для краткости опущен).

Calendar obCal = null;

//Exception here shows invalid format
DateFormat DF = new SimpleDateFormat("dd/MM/yyyy HH:mm");
DF.parse(Date);

//Example string: 29/11/2011 16:30
String[] parts = Date.split("/");

obCal = Calendar.getInstance();
int Y = Integer.parseInt(parts[2].split(" ")[0]);
int m = Integer.parseInt(parts[1]);
int d = Integer.parseInt(parts[0]);
int H = Integer.parseInt(parts[2].split(" ")[1].split(":")[0]);
int M = Integer.parseInt(parts[2].split(" ")[1].split(":")[1]);

obCal.set(Calendar.YEAR, Y);
obCal.set(Calendar.MONTH, m);
obCal.set(Calendar.DAY_OF_MONTH, d);
obCal.set(Calendar.HOUR_OF_DAY, H);
obCal.set(Calendar.MINUTE, M);
obCal.set(Calendar.SECOND, 0);
obCal.set(Calendar.MILLISECOND, 0);

Проверка календаря после этого показывает, что он получает правильную дату и время. Затем я получаю значение миллисекунды начиная с эпохи obCal.getTimeInMillis() и сохраняю его в виде количества секунд как long

long stamp = obCal.getTimeInMillis() / 1000L;

Когда я достигаю время, представленное строкой даты, и сравниваю метку времени из календаря с меткой времени System.currentTimeMillis(), я обнаруживаю, что первая намного больше. Разница между текущим временем и календарным временем (curTime-calTime) обычно где-то в районе -2,500,000

Что может быть причиной этого? Спасибо

Ответы [ 2 ]

7 голосов
/ 29 ноября 2011

Месяц основан на 0, поэтому, когда вы делаете obCal.set(Calendar.MONTH, m);, вы отключаетесь на 1 месяц.

0 голосов
/ 29 ноября 2011

Скорее всего, вы упустили тот факт, что Calendar API определяет MONTH в диапазоне от 0 до 11, а вы анализируете его как от 1 до 12. Это дает разницу в 30 * 86400 секунд ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...