Java Calendar.getTimeInMillis

#java #calendar

#java #Календарь

Вопрос:

Я пытаюсь преобразовать строковые временные метки вида «201110250830» (ггггММддххмм) в количество миллисекунд (длинное). Я использую следующий код:

 Calendar t = Calendar.getInstance();
         t.set(Integer.parseInt(ts.substring(0,4)),
               Integer.parseInt(ts.substring(4,6)) - 1, // month is 0 based!
               Integer.parseInt(ts.substring(6,8)),
               Integer.parseInt(ts.substring(8,10)),
               Integer.parseInt(ts.substring(10,12)),
               0);
return t.getTimeInMillis();
  

Однако иногда я получаю отклонение на несколько миллисекунд. Например:

 long t1 = timestampToLong("201110250830");
long t2 = timestampToLong("201110250831");
assertEquals(60*1000, t2 - t1);
  

иногда дает мне:

 Got exception: java.lang.AssertionError: expected:<60000> but was:<60001>
  

Я проверил документ, но не смог найти ничего подходящего. Есть идеи? (похоже, хороший день, я собираюсь кое-чему научиться здесь! 🙂

Спасибо!

Ответ №1:

Вызов t.clear() перед вызовом set() .

Добро пожаловать в мир обработки времени / даты Java.

Ответ №2:

вы могли бы использовать формат даты следующим образом.

 SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmm");
Date ins = df.parse("201110250830");
long ts = ins.getTime();