2014-09-12 8 views
3

ThreeTen을 사용 중이며 인스턴트 형식을 지정하려고했습니다. 그냥 분할하는 것이 더 쉬울 지 모르지만 나는 호기심이 있습니까?ThreeTen 및 인스턴트 구문 분석

@Test 
public void testInstants() { 
    Instant instant = Instant.now(); 
    String dbDatePattern = "YYYY-MM-dd HH:mm:ss.SSS"; 
    try { 
     DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dbDatePattern); 
     String dbDate = formatter.format(instant); 
    } catch (Exception ex) { 
     int dosomething = 1; 
    } 
} 

오류 : org.threeten.bp.temporal.UnsupportedTemporalTypeException : 지원되지 않는 필드 : 모든 것을에서 나는 즉시이-수 구문 분석과 패턴의 모든 구성 요소와 함께해야 읽은 된 요일

DD DayofWeek가 아닌 달의 날입니다. 아마 붉은 청어를 던져 버릴 것 같지만 이상하게 보입니다.

답변

3

패턴 문자 "Y"는 ThreeTen-Backport 및 JSR-310 (Joda-Time의 시대를 의미 함)에서 주 기반 연도를 의미합니다. week-based-year를 계산하려면 요일이 필요하므로 오류가 발생합니다.

Instant은 작성하려는 포맷터 필드를 제공 할 수 없습니다. ZonedDateTime, LocalDateTime 또는 OffsetDateTime 만 가능합니다. InstantDateTimeFormatter.ISO_INSTANT 또는 이와 유사한 형식으로 지정해야하는 특별한 경우입니다.

String dbDatePattern = "yyyy-MM-dd HH:mm:ss.SSS"; (소문자 YYYY) 대신

해야

String dbDatePattern = "YYYY-MM-dd HH:mm:ss.SSS"; (대문자 YYYY) :

1

명시 적 JodaStephen의 답변을 확인하십시오. 또한

대신

Instant instant = Instant.now();

LocalDateTime localDateTime = LocalDateTime.now();

할 ... 그리고 format() 대신에 그것을 전달한다. DateTimeFormatter.format() 받아들이 무엇 TemporalAccessor를 구현

Instant 모두 이후 및 LocalDateTime, 코드의 나머지 부분은 그대로 작동합니다.