#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();