barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

вторник, 19 января 2016 г.

Java: SimpleDateFormat и парсинг миллисекунд

Проблема

Есть строка с датой: "2016-01-01T11:05:42.1". Если ее пытаться распарсить, используя java.text.SimpleDateFormat и шаблон "yyyy-MM-dd'T'HH:mm:ss.S", в полученной дате мы получим 1 миллисекунду вместо 100. SimpleDateFormat всегда обрабатывает число после точки как количество миллисекунд вне зависимости от реального веса того разряда, на котором расположено число. Т.е. для SimpleDateFormat даты "2016-01-01T11:05:42.1", "2016-01-01T11:05:42.01" и  "2016-01-01T11:05:42.001" идентичны.

Решение

Варианта 2:
  1. Дополняем миллисекунды в исходной строке до трех разрядов
  2. Отказываемся от использования SimpleDateFormat в пользу сторонней библиотеки, например, Joda-Time (http://www.joda.org/joda-time/)
Для последнего вариант парсинг будет выглядеть следующим образом:
import java.util.Date;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.S");
Date parsedValue = format.parseDateTime("2016-01-01T11:05:42.1").toDate();

Комментариев нет:

Отправить комментарий