2014-09-30 2 views
4

У меня есть строка метки времени от службы, имеет 6 миллисекунд цифры:SimpleDateFormat - разбор метки времени с миллисекундами

String timestamp = "2014-09-30T15:30:00.777777"; 

Я разбор его следующим образом:

String format = "yyyy-MM-dd'T'HH:mm:ss.SSS"; 

DateFormat df = new SimpleDateFormat(format, Locale.ENGLISH); 
Date date = df.parse(timestamp); 

SimpleDateFormat df2 = new SimpleDateFormat(); 
System.out.println(df2.format(date)); 

Я ожидал увидеть :

"9/30/14 3:30 PM" 

, но вместо этого я получаю:

"9/30/14 3:42 PM" 

Двенадцать минут вперед. Я попытался использовать другую строку формата с цифрами 6 мс:

String format = "yyyy-MM-dd'T'HH:mm:ss.SSSSSS"; 

Тот же результат.

Кажется, что я должен сделать, это вручную усечение входящих строк временных меток до 3 мс цифр:

timestamp = timestamp.substring(0, timestamp.length()-3); 

тогда я получаю ожидаемый результат. Или я могу использовать строку усеченного формата, которая игнорирует миллисекунды:

String format = "yyyy-MM-dd'T'HH:mm:ss"; 

Являются ли эти правильные решения? Я просто злоупотребляю SimpleDateFormat?

Спасибо

+0

http://stackoverflow.com/questions/19223171/java-util-date-format-ssssss-if-not-microseconds-what-are-the-last-3-digits –

ответ

7

777777 миллисекунд ~ 12 минут

3:30 PM + 12 минут = 3:42 вечер

Вашего синтаксический анализатор работает правильно.

Реальный вопрос: Почему ваши исходные данные дают вам 6-значные миллисекунды? Предполагается, что он будет интерпретироваться как 777,777 миллисекунды?

2

считает, что миллисекундная часть составляет 777777, а так как она больше 1000, партия более 1000 будет свернута, преобразована в секунды и минуты. Да, в вашем случае вы должны усечь ввод, потому что это не миллисекунды, но микросекундыSimpleDateFormat не имеет символа для разбора микросекунд).

Смежные вопросы