2017-12-31 192 views
-2

나는 다음과 같은 형식으로 String를 통해 수신 타임 스탬프가 있습니다자바 8 LocalDateTime - 문자열 변환에 0.000 밀리 초를 유지하는 방법

2016-10-17T12 : 42 : 04.000

나는 다음과 같은 라인을 통해 (다시 String에 다음) 여기에 몇 가지 일을 추가 할 LocalDateTime로 변환하고 있습니다 :

String _120daysLater = LocalDateTime.parse("2016-10-17T12:42:04.000", 
    DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS")).minusDays(120).toString()); 

Howev 어, 그 응답이 다시 .000 밀리 초가 떨어지는 것을 알았습니다.

정확한 패턴이 유지되도록하는 가장 확실한 방법이 확실하지 않습니다. 지금은 단 1 밀리 초를 더하는 것일뿐입니다. 예전의 SimpleDateFormat을 통합하는 방법이 있지만, 더 좋은 방법이 있기를 바랍니다.

+2

toString()을 호출하는 대신 동일한 DateTimeFormatter를 사용하여 LocalDateTime의 서식을 지정하면됩니다. –

답변

5

LocalDateTime::toString 부품이 생략되는 경우 제로 :

생략 된 부분은 제로로 암시되는 시간의 전체 값을 출력하는 가장 짧은 것을 사용하는 형식.

toString() 대신에 LocalDateTime::format을 사용하십시오.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS"); 
LocalDateTime _120daysLater = LocalDateTime.parse("2016-10-17T12:42:04.000", formatter).minusDays(120); 

// This just uses default formatting logic in toString. Don't rely on it if you want a specific format. 
System.out.println(_120daysLater.toString()); 

// Use a format to use an explicitly defined output format 
System.out.println(_120daysLater.format(formatter));