LocalDate를 Instant로 변환하는 방법?


106

Java 8의 새로운 DateTime API로 작업합니다.

LocalDate를 Instant로 변환하는 방법? 나는 예외를 얻는다

LocalDate date = LocalDate.of(2012, 2, 2);
Instant instant = Instant.from(date);

왜 그런지 모르겠습니다.


A가 있기 때문에 LocalDate하지 않습니다 시간을 포함한다.
OrangeDog

답변:


98

Instant클래스는 타임 라인에 순간 지점을 나타냅니다. 로 /에서 변환 LocalDate하려면 시간대 가 필요합니다. 다른 날짜 및 시간 라이브러리와 달리 JSR-310은 자동으로 시간대를 선택하지 않으므로이를 제공해야합니다.

LocalDate date = LocalDate.now();
Instant instant = date.atStartOfDay(ZoneId.systemDefault()).toInstant();

이 예에서는 JVM의 기본 시간대 ZoneId.systemDefault()--를 사용하여 변환을 수행합니다. 관련 질문 에 대한 더 긴 답변 을 보려면 여기를 참조하십시오 .


업데이트 : 수락 된 답변 LocalDateTime::toInstant(ZoneOffset)ZoneOffset. 이 대답 LocalDate::atStartOfDay(ZoneId)은 어떤 ZoneId. 따라서이 답변은 일반적으로 더 유용합니다 (그리고 아마도 받아 들여질 것입니다).

추신. 나는 API의 주요 저자였습니다.


1
ZoneId (시간대)가 매개 변수이고 ZoneOffset이 아니기 때문에 이것이 허용 된 대답보다 더 유용하다고 생각합니다 (UTC에서 시간이 이동하여 여름 / 겨울의 시간대로 변경 될 수 있음).
wuerg

1
내가 쓰고있는 단위 테스트에서, 나는 com.google.protobuf.Timestamp로 변환 된 LocalDate를 가지고 있으며, 그리고 나서 Instant를 통해 LocalDate에 다시 매핑됩니다. 허용 된 답변이 제안하는 접근 방식을 사용할 때 예상되는 LocalDate를 반환하지만이 접근 방식을 사용하면 "오늘"대신 "어제"가 반환됩니다. 내 시간대는 GMT + 1
Nadrendion

127

인스턴트로 변환하려면 LocalDateTime 인스턴스가 있어야합니다. 예 :

LocalDate.now().atStartOfDay().toInstant(ZoneOffset.UTC)

감사합니다. 인스턴트를 받으려면 시간대를 지정해야하므로 이제 이해합니다.
user1643352 2014-04-22
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.