2016-06-07 5 views
1

TimeStamp ('2016-06-07 08-01-55'와 같은)와 특정 ZoneId ('Europe/Berlin')와 같은 인스턴트가 주어지면이 코드의 예상 결과는 어떻게됩니까? (시간은 변경되지 않지만, ZoneId 변경)Instant 및 ZoneId에서 ZonedDateTime을 생성 할 때 예상되는 동작은 무엇입니까?

:

ZonedDateTime.ofInstant(timestamp.toInstant, zoneId) 

그것은

'00 2016년 6월 7일 08-01-55 02'있을까 또는

'2016년 6월 7일 10-01-55 +02 : 00'(시간 & ZoneId이 변경)

다른 환경에서 두 가지 동작을 모두 보았 기 때문에이 질문을하고 있습니다.

+3

다른 동작이 나타나는 경우 사용하는 순간이 두 경우에 서로 다른 것으로 판단됩니다. 이 정보를 재현 할 수있는 충분한 정보를 제공하지 못했습니다. [mcve]를 제공해주십시오. –

+0

또는 zoneId가 시스템 표준 시간대입니까? – Tunaki

답변

2

각 매개 변수를 올바르게 설정했다고 가정 할 때 출력이 결정적입니다. 데이터 사용 :

LocalDateTime datetime = LocalDateTime.of(2016, 6, 7, 8, 1, 55); 
ZonedDateTime zdt = datetime.atZone(ZoneId.of("Europe/Berlin")); 
Instant instant = zdt.toInstant(); 

Timestamp ts = Timestamp.from(instant); //The timestamp you describe in your question 

ZonedDateTime result = ZonedDateTime.ofInstant(ts.toInstant(), ZoneId.of("Europe/Berlin")); 

System.out.println(result); //WILL ALWAYS PRINTS: 2016-06-07T08:01:55+02:00[Europe/Berlin] 
2

인스턴트는 항상 1970-01-01T00 : 00 : 00Z부터 계산됩니다. 따라서 순간에서 ZonedDateTime을 생성하면 인스턴트 타임 스탬프가 해당 영역으로 변환됩니다.

예를 들어 입력 타임 스탬프에 영역 정보가없는 것 같습니다. 아마 대부분의 파서가 타임 스탬프가 시스템 기본 영역에 있다고 가정하기 때문에 이것이 순간적으로 파싱 될 때 다른 결과를 보게 될 것입니다. 이는 실행되는 시스템에 따라 다른 순간에 발생할 수 있으며, 이로 인해 차례대로 다른 동작이 발생할 수 있습니다.

관련 문제