2011-01-18 2 views
5

필자는 CoreData 저장소에 날짜와 시간을 유지하고 처음 입력 한 시간을 정확하게 사용자에게 제시해야합니다. 문제는 그들이 동부 해안에서 4시에 입장했다가 나중에 웨스트 코스트에서 기록한 시간을 보면 iPhone이 보편적 인 시간을 현지 시간으로 변환하기 때문에 1 시가 나타난다는 것입니다. 나는 4:00 - 아마 4:00 (+ 3h00)를 보여줄 필요가있다.CoreData의 NSDate가 시간대를 캡슐화합니까?

코어 데이터 모델을 다시 구성하기 전에 저장된 NSDate 객체에서 생성시 활성화 된 NSTimeZone을 파생시킬 방법이 없는지 확인하고 싶습니다. 거기 있니? 그렇지 않다면 제작시 NSTimeZone을 가장 잘 캡처하는 방법은 무엇입니까? GMT와의 생성 시간 NSTimeZone 시차를 나타내는 NSNumber?

감사합니다.

+1

큰 질문입니다! 그것은 고전적인 혼란입니다. 짧은 대답은 '아니오'입니다. –

답변

8

NSDate는 일반적인 시점을 나타내며 특정 표준 시간대 정보는 포함하지 않습니다.

오프셋을 저장하는 대신 NSTimeZone의 name 속성을 저장하는 것이 좋습니다. 그런 다음 +[NSTimeZone timeZoneWithName:]을 사용하여 표준 시간대를 얻은 다음 현지 시간으로 변환하십시오. 따라서 사용자에게 정보를 표시하는 방법에 최대한의 유연성을 제공합니다.

+0

'NSDate'에 대해 futz하지 않으려 고하는 +1! 시간대 정보를 따로 저장하면 확실히 갈 수 있습니다. –

+0

대부분의 경우 정보를 표시해야하는 경우 GMT로 날짜를 저장하고 사용자의 현지 시간대로 변환 할 수도 있습니다. –

+0

감사! 이것은 name 속성이 일광 절약 시간 오프셋을 캡처하지 않는다는 것을 제외하고는 좋은 접근 방법 인 것 같습니다. 아마도 실제 사례 일 수도 있지만 유럽 표준 시간대의 이름을 미국 표준으로 전환하기위한 기준으로 사용할 수는 없으며 해당 시간대 오프셋이 비정상적 이었기 때문에 전환 오류가 발생했습니다. unsync'ed DST? 어쨌든 엔트리 타임에 그리니치 표준시에서 오프셋을 캡처하는 것이 가장 좋습니다. 나는 또한 사용자 정보만을위한 표준 시간대 이름이나 약어를 저장할 수도 있다고 생각한다. – ed94133