Java8에서 시간대로 LocalDateTime 형식 지정
이 간단한 코드가 있습니다.
DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd HH:mm:ss.SSSSSS Z");
LocalDateTime.now().format(FORMATTER)
그러면 다음 예외가 발생합니다.
java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: OffsetSeconds
at java.time.LocalDate.get0(LocalDate.java:680)
at java.time.LocalDate.getLong(LocalDate.java:659)
at java.time.LocalDateTime.getLong(LocalDateTime.java:720)
at java.time.format.DateTimePrintContext.getValue(DateTimePrintContext.java:298)
at java.time.format.DateTimeFormatterBuilder$OffsetIdPrinterParser.format(DateTimeFormatterBuilder.java:3315)
at java.time.format.DateTimeFormatterBuilder$CompositePrinterParser.format(DateTimeFormatterBuilder.java:2182)
at java.time.format.DateTimeFormatter.formatTo(DateTimeFormatter.java:1745)
at java.time.format.DateTimeFormatter.format(DateTimeFormatter.java:1719)
at java.time.LocalDateTime.format(LocalDateTime.java:1746)
이 문제를 해결하는 방법은 무엇입니까?
LocalDateTime
시간대가없는 날짜-시간입니다. 형식에 시간대 오프셋 형식 기호를 지정했지만 해당 LocalDateTime
정보가 없습니다. 이것이 오류가 발생한 이유입니다.
시간대 정보를 원하면 ZonedDateTime
.
DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd HH:mm:ss.SSSSSS Z");
ZonedDateTime.now().format(FORMATTER);
=> "20140829 14:12:22.122000 +09"
JSR-310의 접두사 "Local"(Java-8의 java.time-package)은 해당 클래스의 내부 상태 (여기서는 LocalDateTime
)에 시간대 정보가 있음을 나타내지 않습니다 . 종종 오해의 소지가있는 이름에도 불구하고 이러한 클래스 는 시간대 정보 또는 오프셋 과 같 LocalDateTime
거나 LocalTime
없습니다 .
오프셋 정보 (패턴 기호 Z로 표시됨)를 사용하여 이러한 임시 유형 (오프셋을 포함하지 않음)을 형식화하려고했습니다. 따라서 포맷터는 사용할 수없는 정보에 액세스하려고 시도하고 관찰 한 예외를 throw해야합니다.
해결책:
이러한 오프셋 또는 시간대 정보가있는 유형을 사용하십시오. JSR-310에서 이것은 OffsetDateTime
(오프셋은 포함하지만 DST 규칙을 포함한 시간대는 포함하지 않음) 또는 ZonedDateTime
. isSupported (TemporalField) 메서드를 조회하여 이러한 유형의 지원되는 모든 필드를 확인할 수 있습니다 . . 이 필드 OffsetSeconds
는 OffsetDateTime
및 ZonedDateTime
에서 지원 되지만에서는 지원 되지 않습니다 LocalDateTime
.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd HH:mm:ss.SSSSSS Z");
String s = ZonedDateTime.now().format(formatter);
LocalDateTime.now (). format (DateTimeFormatter.ofPattern ( "yyyyMMdd HH : mm : ss.SSSSSS Z"));
참고 URL : https://stackoverflow.com/questions/25561377/format-localdatetime-with-timezone-in-java8
'programing' 카테고리의 다른 글
ArrayList를 정렬하는 방법 (0) | 2020.08.29 |
---|---|
인터페이스 빌더의 WKWebView (0) | 2020.08.28 |
선택적 매개 변수가있는 PHP 함수 (0) | 2020.08.28 |
병합 중에 Git이 항상 최신 버전을 선택하도록 강제 하시겠습니까? (0) | 2020.08.28 |
Visual Studio 2008에서 프로젝트 구성을 제거하려면 어떻게합니까? (0) | 2020.08.28 |