2017-04-04 7 views
0

나는 세 가지 형식으로 JSON 날짜 값을 반환 할 수있는 API가 있습니다변환 날짜 시간 문자열 8

  1. 2017-04-30T00 : 00 + 02 : 00
  2. 2016-12-05T04는 : 00
  3. 2016년 12월 5일

나는 java.time.LocalTimeDate로 세 가지를 모두 변환해야합니다. Joda는 DateTime 객체에 멋진 생성자를 사용합니다.이 생성자는 세 가지 형식을 모두 String으로 변환하여 변환합니다. DateTime dt = new DateTime(StringFromAPI);이면 충분합니다.

Java 8 (java.time 패키지)에서도 비슷한 기능이 있습니까? 이제 먼저 String을 정규식으로 검사 한 다음 LocalDateTime, ZonedDateTime 또는 LocalDate 중 하나를 만들고 후자를 LocalDateTime으로 변환해야합니다. 나 좀 귀찮은 것 같아. 쉬운 방법이 있습니까?

+0

[DateTimeFormatter] (https://docs.oracle.com/javase/8/docs/apat/java/time/format/DateTimeFormatter.html)에 대한 내용 – Jens

+0

첫 번째 형식의 '+02 : 00' 그냥 무시해야합니까? 세 번째 시간에 0:00 (자정)이라고 가정합니까? –

+0

@ OleV.V. 예, 예. –

답변

3

저는 장단점이있는 두 가지 옵션을 제시합니다.

하나, 당신의 세 가지 형식을 허용하도록 사용자 정의 DateTimeFormatter을 구축 : 다른 한편으로, 사람이 쉽게 조금 까다로운 찾을 수

한편
public static LocalDateTime parse(String dateFromJson) { 
    DateTimeFormatter format = new DateTimeFormatterBuilder().append(DateTimeFormatter.ISO_LOCAL_DATE) 
      .optionalStart() 
      .appendLiteral('T') 
      .append(DateTimeFormatter.ISO_LOCAL_TIME) 
      .optionalStart() 
      .appendOffsetId() 
      .optionalEnd() 
      .optionalEnd() 
      .parseDefaulting(ChronoField.HOUR_OF_DAY, 0) 
      .toFormatter(); 
    return LocalDateTime.parse(dateFromJson, format); 
} 

, 그것은, 깨끗. 귀하의 질문에 세 개의 샘플 문자열의 경우는 생산 :

2017-04-30T00:00 
2016-12-05T04:00 
2016-12-05T00:00 

다른 옵션을 차례로 세 가지 형식을 시도하고 작동하는 하나의 선택 :

public static LocalDateTime parse(String dateFromJson) { 
    try { 
     return LocalDateTime.parse(dateFromJson); 
    } catch (DateTimeParseException e) { 
     // ignore, try next format 
    } 
    try { 
     return LocalDateTime.parse(dateFromJson, DateTimeFormatter.ISO_OFFSET_DATE_TIME); 
    } catch (DateTimeParseException e) { 
     // ignore, try next format 
    } 
    return LocalDate.parse(dateFromJson).atStartOfDay(); 
} 

나는 생각하지 않는다를 이것을 가장 아름다운 코드 일지라도, 여전히 일부는 첫 번째 옵션보다 더 간단하다고 생각할 수 있습니까? 필자는 내장 된 ISO 형식만으로도 품질이 우수하다고 생각합니다. 3 개의 샘플 문자열에 대한 결과는 위와 같습니다.

+0

실례합니다. 내 호기심, @BartKooijman, 내 대답을 사용할 수 있습니까? 나는 그것에 노력을 기울 였지만, JodaTime'DateTime' 생성자를 설명하는 것만 큼 간단하지 않다는 것을 알고 있습니다. 나는 너의 일반적이고 정직한 반응/피드백에 관해서 받아 들일만한 진드기를 요구하는 것이 아니다. –