자바 시간의 처리와 혼동 스럽습니다. 필자는 타임 스탬프가 zulu 시간으로 지정되면 java가 현지 시간과 관련하여 오프셋을 처리한다는 가정하에 오랫동안 작업했습니다.자바와 혼란 UTC 시간 분석하기
설명해주십시오. 현재 UTC +1의 오프셋을 가진 BST입니다. 염두에두고,이 줄루어 시간을 기대 :
2016-09-12T13:15:17.309Z
그것을 구문 분석 후
2016-09-12T14:15:17.309
LocalDateTime 될 수 있습니다. 이것은 기본 시스템 시간이 BST로 설정되고 위의 시간 소인 (zulu 시간)이 UTC 시간임을 지정하기 때문입니다.
String ts = "2016-09-12T13:15:17.309Z";
LocalDateTime parse = LocalDateTime.parse(ts, DateTimeFormatter.ISO_DATE_TIME);
System.out.println(parse);
이 인쇄됩니다 :
대신 그러나이 샘플을 고려
2016-09-12T13:15:17.309
은 그래서 LocalDateTime로 구문 분석 타임 스탬프는, UTC 시간으로 인식되지 않는 대신 직접의 현지로 취급. 그래서 나는 아마도 올바른 로컬 시간을 얻기 위해 그것을 ZonedDateTime으로 구문 분석하고 LocalDateTime으로 변환해야한다고 생각했습니다. 이 테스트로 : 두 날짜
2016-09-12T13:15:17.309Z
2016-09-12T13:15:17.309
같은 출력 :
String ts = "2016-09-12T13:15:17.309Z";
ZonedDateTime parse = ZonedDateTime.parse(ts, DateTimeFormatter.ISO_DATE_TIME);
System.out.println(parse);
System.out.println(parse.toLocalDateTime());
나는 출력을 얻을.
올바르게 내가 찾을 수있는이 구문을 분석 할 수있는 유일한 방법입니다 :
String ts = "2016-09-12T13:15:17.309Z";
Instant instant = Instant.parse(ts); // parses UTC
LocalDateTime ofInstant = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
System.out.println(instant);
System.out.println(ofInstant);
이 인쇄 : 올바른
2016-09-12T13:15:17.309Z
2016-09-12T14:15:17.309
.
그래서 질문 (들)은 다음과 같습니다- 자바 시간은 UTC 타임 스탬프를 인식하고 올바른 시스템 기본값으로 구문 분석하지 않나요?
LocalDateTime#parse
접근 방식을 사용하여 올바른 결과를 얻으려면 어떻게해야합니까?- 지금 모든 항목에
Instant
을 사용해야하며 파싱을 취소해야합니까?
문제는 jersey/jackson
의 자바 시간 모듈은 ISO 포맷 LocalDateTime#parse
일반적인 방법을 사용하여 타임 스탬프를 분석한다는 것이다. 나는 그들이 실제로 줄루 (Zulu) 시간에있는 동안 LocalTime
으로 대우되고 있기 때문에 나의 시간은 싫은 것이 아니라는 것을 깨달았다.
예제가 예 3과 즉시 대화를하는 것처럼 보입니다. 맞습니다. LocalDateTime이 의미하는 바를 오해했습니다. 시간대 :) 감사합니다 – pandaadb
아, 그래서 ZonedDateTime은 "Z"로 자동으로 (내가 원하는 것) UTC로 해석하는 시간대를 인식합니다 - 맞습니까? – pandaadb
@pandaadb 그래, 이걸 쓰는 또 다른 방법 일거야. –