2016-07-08 4 views
4

형식을 2016-07-08T00 : 00 : 00.000Z로 설정하려고합니다.시간, 분, 초 및 밀리 초를 0으로 만드는 방법은 무엇입니까?

String myDate = "20160708"; 
LocalDate myLocalDate = LocalDate.parse(myDate, DateTimeFormatter.BASIC_ISO_DATE); 
OffsetDateTime myOffsetDate = myLocalDate.atTime(OffsetTime.now(ZoneOffset.UTC)); 

System.out.println(myOffsetDate); //2016-07-08T14:58:23.170Z 
+0

당신은 시간을 필요로하지 않는다는 의미는 코딩 즐길 수, 당신은 단지 출력 'T00 필요 : 00 : 00.000Z'를? – Alexey

+0

날짜도 출력하려고합니다. – Jon

+0

나는 이미 알아 냈습니다.) – Alexey

답변

6

글쎄 "내가 현재 시간을 사용하고 싶다"고하지 않습니다. 즉,이가하고있는 작업은 다음과 같습니다

OffsetDateTime myOffsetDate = myLocalDate 
    .atTime(LocalTime.MIDNIGHT) 
    .atOffset(ZoneOffset.UTC); 

을 또는 당신이 선호하는 경우 : 당신은 그냥 오프셋 제로 자정을 제공하여 LocalDate에서 OffsetDateTime을 원하는 경우에

OffsetTime.now(ZoneOffset.UTC) 

, 당신은 사용할 수 있습니다

OffsetDateTime myOffsetDate = myLocalDate 
    .atTime(OffsetTime.of(LocalTime.MIDNIGHT, ZoneOffset.UTC)); 

(개인적으로 나는 첫 번째 버전을 선호합니다 ...)

그게 너에게 맞을거야 OffsetDateTime. 당신이 밀리 초와 그 서식을 지정하려는 경우, 당신은 명시 적으로 수행해야합니다 :

DateTimeFormatter formatter = DateTimeFormatter 
    .ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSX"); 
System.out.println(myOffsetDate.format(formatter)); 

의견에서 언급 한 바와 같이, 당신은 OffsetDateTime의 대신 ZonedDateTime에 발견하는 경우, 당신은

을 사용할 수 있습니다
ZonedDateTime myOffsetDate = myLocalDate.atStartOfDay(ZoneOffset.UTC); 
+1

@assylias : True - 추가 할 것입니다. –

+0

도움을 많이 주셔서 감사합니다! – Jon

+0

포맷 된 문자열을 다시 OffsetDateTime으로 변환하려고 할 때 초 및 밀리 초를 유지하는 방법이 있습니까? OffsetDateTime.parse (formattedString)와 같이 작성하는 초와 밀리 초를 제거하는 것으로 보입니다. – Jon

0

LocalDate를 사용하여 주어진 문자열로 ISO_INSTANCE 날짜 형식을 가져올 수 있는지 확실하지 않습니다. 하지만 당신은 자바 8 개 이하의 코드를 사용하여 필요한 형식을 얻을 수 있습니다.

public String getISO_8601DateFormat(String yyyyMMdd){ 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); 
    String requiredFormat = null; 
    try { 
     Date inputDate = sdf.parse(yyyyMMdd); 
     long dateLongRepresentation = inputDate.getTime(); 
     long myTimeZoneOffset = TimeZone.getTimeZone(ZoneId.systemDefault()).getOffset(inputDate.getTime()); 
     Instant instance = Instant.ofEpochMilli(dateLongRepresentation + myTimeZoneOffset); 
     requiredFormat = instance.toString(); 

    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

    return requiredFormat; 
} 

자바 :

+2

좋은 해결책은 아닙니다. 이전 날짜 - 시간 클래스 ('Date','SimpleDateFormat')와 그 대체물 인 java.time 클래스를 혼합합니다. 오래된 클래스는 잘못 설계되고 혼란스럽고 번잡하며 해상도가 더 낮습니다 (밀리 초 대 나노 초). 오래된 수업은 피하십시오. Jon Skeet의 [정답] (http://stackoverflow.com/a/38270241/642706)을 참조하십시오. 또한 java.time 해결책을 묻는 질문에 태그를 적어 두십시오. –

+0

예, 동의합니다. Jon Skeet의 솔루션이 훨씬 깔끔합니다. (저는 매우 나쁜 코더입니다.) –

+1

아니요, 나쁜 코더가 아닙니다. 자바에는 많은 클래스 라이브러리가 있는데, 그 중 일부는 구식이어서 이전 날짜 - 시간 클래스에서 JavaDoc을 철저히 읽으면 "대신 java.time 사용"을 시도합니다. –

관련 문제