2017-10-27 1 views
0

내 응용 프로그램 사용자는 "점심마다 토요일 12:00"과 같은 반복 이벤트를 만들 수 있습니다.반복 이벤트 처리 일 동계/서머 타임

이제 올바르게 접근하는 방법을 모르겠다는 문제가 발생했습니다. 이벤트 체인이 크고 다른 시간대 (겨울과 여름 시간) 인 경우, 모든 이벤트를 나열하는 시간이 다른 시간을 표시합니다. 이벤트 클라이언트 측을 나열 할 때 그래서 다음과 같이 할 수

2017-10-28T12:00:00.000+02:00 

: 겨울에

2 층과 3 때 사이
2017-10-21 12:00:00.000 (parsed from: 2017-10-21T12:00:00.000+02:00) 
2017-10-28 12:00:00.000 (parsed from: 2017-10-28T12:00:00.000+02:00) 
2017-11-04 11:00:00.000 (parsed from: 2017-11-04T12:00:00.000+02:00) 
2017-11-11 11:00:00.000 (parsed from: 2017-11-11T12:00:00.000+02:00) 

, 클라이언트의 변경으로

날짜는 예를 들어 서버 측에 저장됩니다 시간은 +01 : 00입니다. 그에 따라 시간이 조정되며 사용자는 같은 시간에 갑자기 시작하고 1 시간 전에 이벤트 행사가 갑자기 시작되었다고 생각할 수 있습니다.

시간대와 상관없이 항상 클라이언트 측에서 구문 분석 할 때 이벤트 시간 (12:00)을 표시하고 싶습니다. 또 다른 해결책은 조다 (Joda) 시간으로 정보를 추출 할 수있는 경우 여름/겨울 시간으로 표시되는 상태를 유지하는 것입니다.

+0

당신은 타임 스탬프를 서버에 저장하고 정확히 클라이언트에 보내고 나서 시간대에 따라 클라이언트에 표시되는 것을 결정하기를 원할 것입니다. – Lino

+1

하나의 대안은 값을'LocalDateTime'으로 저장하고' toDateTime (DateTimeZone)'을 표시합니다. –

+0

시간대가 +02 : 00이 아니지만 DST에 대한 규칙이있는 Europe/Paris와 같은 모든 날짜에 대해 +02 : 00을 저장하는 이유는 무엇입니까? –

답변

1

클래스 서버 측의 java8 LocalDateTime을 사용하고 원하는 경우 시간대를 무시하십시오.

LocalDateTime은 시간대 정보없이 날짜 (및 시간)를 지정하려는 경우에만 사용됩니다.

데이터베이스에서 시간대가없는 데이터 시간을 저장할 수 없다면 매번 동일한 시간대 (예 : UTC)를 사용하여 서버의 시간 소인과 시간 소인을 변환 할 수 있습니다. 그냥 클라이언트에 보내고 클라이언트에서 LocalDateTime으로 받도록하십시오.

편집 : 아래 설명에 대한 응답으로 현지 시간대에 따라 사용자에게 날짜를 표시하려면 표준 시간대 (예 : UTC)에 ZonedDateTime을 저장하고 Locale을 저장하는 것이 좋습니다 사용자의 그런 다음 DST 및 기타 표준 시간대 변경을 염두에 둔 로케일을 사용하여 날짜를 사용자 별 날짜 형식으로 변환 할 수 있습니다.

EDIT2 : 날짜 시간을 변환하려면 지역 번호 ZoneId을 사용할 수 있습니다. 로켈은 여전히 ​​서식을 지정하는 데 유용 할 수 있습니다.

+0

여러 국가의 사용자가 있으므로 데이터베이스에 표준 시간대 정보를 저장하면 도움이 될 것이라고 생각했습니다. 클라이언트에게 응답하기 전에 날짜를 LocalDateTime으로 변환하고 시도해 보겠습니다. –

+0

@LucasA [UTC 오프셋] (https://en.wikipedia.org/wiki/UTC_offset)은 [** not * * 시간대와 동일한 것] (https://stackoverflow.com/a/36636543). '+02 : 00'은 "UTC 앞으로 2 시간"을 의미하지만 연중 다른시기에 많은 국가에서 사용되며 DST 변경 사항을 처리하지 않습니다. DST 효과를 실제로 고려하려면 [America/New_York] 또는 [Europe/New York]과 같이 [지역/도시] 형식으로 항상 [IANA 시간대 이름] (https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) 베를린) –

+0

그 사용자가보고 싶은 것에 따라 다릅니다. 사용자 A는 UTC에 살고 B는 UTC + 5에 살고 있다고 가정 해보십시오. B가 매주 토요일 13:30에 반복 이벤트를 만드는 경우 A는이를 08:30 또는 13:30으로보고 싶습니까? – Buurman