2016-12-15 7 views
1

Источник FastDateFormat.getInstance("HHmmssS").format(Calendar.getInstance()); возвращает строку в формате «HHmmssSSS», например. 152712599 вместо этого ожидается 1527125.Поведение FastDateFormat HHmmssS, такое как HHmmSSS

Пакет и версия: «package org.apache.commons.lang3.time; @version $ Id: FastDateFormat.java 1591488 2014-04-30 21: 49: 35Z».

В приведенном ниже решении будет описан обходной путь.

+0

Ну, не поддерживается 'FastDateFormat', но мой Lib [Time4J] (https://github.com/MenoData/Time4J), например: 'System.out.println (ChronoFormatter.ofTimePattern (" HHmmssS ", PatternType.CLDR, Locale.ROOT) .format (PlainTime.nowInSystemTime());' // 1633154, а также быстрее (особенно если форматировщик хранится как статическая константа - поточно-безопасный). –

ответ

2

На самом деле то, что вы хотите, это децисекунды, а не миллисекунды, но вы правы, нет никакой поддержки для этого (пока?).

Опасайтесь, чтобы форматирование его с помощью одного «S» могло дать вам только фактическую миллисекунду, поэтому вам нужно использовать строку формата "HHmmssSSS". Тогда подстрока должна быть длиной "HHmmssS".length().

Таким образом, ваш фактический обходной путь/решение должно быть достаточно:

public static <Format> String HHMMssS(final Format calendar) { 
    final String HHmmssS = "HHmmssSSS"; 
    return FastDateFormat.getInstance(HHmmssS).format(calendar).substring(0, "HHmmssS".length()); 
} 

Смежный вопрос (относительно синтаксического анализа): Deci and Centi Seconds parsing in java

0

Обходной путь отключает последние 2 цифры «HHmmssSSS».

public static <Format> String HHMMssS(final Format calendar) 
{ 
    final String HHmmssS = "HHmmssS"; 
    return FastDateFormat.getInstance(HHmmssS).format(calendar).substring(0, HHmmssS.length()); 
}