2013-09-07 2 views
0

ISO 8601 형식의 서버에서 날짜를 가져옵니다. 날짜는 특정 프로그램의 특정 에피소드가 방송되는 시간을 나타냅니다.NSDate 문제 (UTC 오프셋 및 시간대)

"2013-07-30T21 : 00 : 00-05 : 00"

동부 표준시 오후 9시 7 월 30 일, 2013입니다 여기에 예제 날짜입니다. EST는 -05 : 00입니다. 이 문제는 사용자에게 날짜를 다시 표시하려고 할 때 발생합니다 (이 경우 자신). 저는 현재 중부 표준시에 있지만 일광 절약 시간제가 활발합니다. 즉, iOS에 현재 중부 일광 절약 시간제라고 나와 있는데 이는 -05 : 00입니다 (보통 CST는 -06 : 00).

이 쇼는 CST 시간대의 오후 8시에 방송됩니다. 일광 절약 시간제가 켜지거나 꺼져 있더라도 상관 없습니다. 시계는 오후 8시에 항상 방송됩니다. 일반적으로 일광 절약 시간제가 아닌 경우 iOS는 -05 : 00에서 -06 : 00으로 전환하기 때문에 적절한 전환을 수행 할 수 있습니다. 현재 일광 절약 시간제입니다. 원래 오프셋으로 -05 : 00을, 현재 오프셋으로 -05 : 00을 볼 수 있으므로 전환이없고 오후 9시에 시작하는 프로그램이 표시됩니다. 이 문제를 어떻게 처리 할 생각입니까?

답변

0

는 불행하게도 단지 시간대가 중부 표준시 또는 동부 표준시와 같은 실제 시간대 다시 -05:00 같은을 상쇄지도 할 수있는 방법이 없습니다. 당신이 지적했듯이, 그것은 Central Daylight Time 또는 Eastern Standard Time이 될 수 있습니다. 그러나 한 지점 또는 다른 지점에서 -05:00 오프셋을 사용하는 임의의 수의 다른 시간대 일 수 있습니다. this list of time zones을보고 오프셋 열 중 하나를 기준으로 정렬하면 해당 열의 개수를 알 수 있습니다. look here도 가능합니다.

이제 다행히도 날짜/시간 정보가 있습니다. 따라서 이것을 사용하여 중 일부를 사이에서 구별 할 수 있습니다. 또한 귀하의 데이터가 미국이라는 것을 알고있는 경우 모호성을 더욱 제한 할 수 있습니다.

그래도 한 가지 문제가 있습니다. 2013-11-03T01:00:00-05:00과 같은 시간은 실제로 에 모두 CDT와 EST가 동시에 있습니다! 어떻게 그렇게 될수 있니? 음, 미국에서 우리는 같은 시간에 우리의 시계를 모두 바꾸지 않습니다. 각 시간대는 현지 시간으로 오전 2시에 시간대를 변경합니다. 따라서 매년 동부 시간이 이미 그 타락 전환을 경험 한 시간이 있지만 중앙 시간은 아직 없습니다.

이 모든 것을 처리 할 수있는 유일한 방법은 전체 IANA 시간대 (동부위한 America/New_York 또는 중앙에 America/Chicago 등)로, 문맥 정보의 다른 비트를 저장하는 것입니다 - 또는 경우에 그냥 표시입니다 선택한 표준 시간대 약어 (EST, CDT 등)와 함께 문자열을 저장할 수 있습니다.

다음을 참조하십시오 : the timezone tag wiki의 "시간대! = 오프셋".