2017-11-02 2 views
1

나는 사용자가 선택할 수있는 시간대 목록을 가지고 있습니다. 따라서 java.time.ZoneId.getAvailableZoneIds()으로 전화하여 getDisplayName 메서드를 사용할 수 있다고 생각했습니다. 이ZoneId의 ID 지역화 된 이름

중앙 유럽 표준시 나는 시간대가 unqiue하지 않은 오프셋 추가하더라도

같은 중복 항목이 많이 발생합니다. 그러나 ZoneId의 ID는 항목을 구별하지만 은 어떻게 현지화할 수 있습니까? ID는

유럽/로마

+0

나는 할 수 있을지 의심 스럽다. 그들은 유일한 식별자로되어 있습니다. – shmosel

+0

@shmosel, 사용자 언어에 적합한 표준 시간대 선택 방법을 알고 있습니까? –

답변

4

그것은 ZoneId 인스턴스에서 getDisplayName를 호출하여 표시 이름의 지역화 된 버전을 얻을 수처럼 항상 영어입니다. 각 영역의 제목의 크기와 독특한 결과를 얻을 수있는 .distinct() 방법을 변경

ZoneId.getAvailableZoneIds().stream() 
     .map(ZoneId::of) 
     .map(zid -> zid.getDisplayName(TextStyle.FULL, Locale.GERMAN)) 
     .distinct() 
     .forEach(System.out::println); 

참고 TextStyle 인수 : 즉 getAvailableZoneIds()의 결과를 통해 반복을 필요로한다.

+0

예, 할 수는 있지만 실제로 사용자가 올바른 시간대를 선택할 수 있습니까? 즉, 같은 표시 이름을 가진 시간대의 오프셋은 항상 동일합니까? –

+1

@SteffenHarbich 예 timezone name을 사용하면 올바른 시간대를 선택할 수 있습니다. 그러나 일광 절약 시간이 지켜지면 일년에 두 번 오프셋이 바뀝니다. 그래서 ZoneId를 ZoneOff로 변환하는 날짜/인스턴트가 필요합니다. (https://stackoverflow.com/q/32626733/1413133) –

+0

예, 번역 할 ZoneId를 처리 할 방법을 결정해야합니다 너의 langauge 안에 동일한 표시 이름에. 각 옵션 뒤에 ID를 추가하는 옵션이 있다고 생각합니다. 예를 들어 "중부 유럽 표준 시간 - 유럽/로마"및 "중부 유럽 표준 시간 - 유럽/오슬로"와 같은 것입니다. 가장 아름다운 해결책은 아니지만 사용자가 탐색 할 수 있어야한다고 생각합니다. –