2016-12-15 5 views
1

소스 FastDateFormat.getInstance("HHmmssS").format(Calendar.getInstance());은 "HHmmssSSS"형식의 문자열을 반환합니다. 152712599 대신 예상 됨 1527125.FastDateFormat HHmmssSHHmmSSS와 같은 동작

패키지 및 버전은 "패키지 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

은 실제로 당신이 원하는 무엇을 0.1 초,하지 밀리 초,하지만 당신 말이 맞아, 그에 대한 지원이 없습니다 (아직?).

단일 '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

해결 방법은 'HHmmssSSS'의 마지막 두 자리를 자릅니다.

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