2012-06-18 1 views
0

나는 NSDate이 시간대를 나타내지는 않지만 다른 사람과의 관계를 가장 잘 디버깅하는 방법에 대해 조언 해 줄 수 있습니다 (예 : NSDatePicker, CalCalendarStore).NSDate/NSTimezone 관련 코드를 가장 잘 디버깅하는 방법

예를 들어, 날짜 선택 도구의 날짜를 01-01-2012로 설정하고 싶습니다.

newDate = [NSDate date]; 
NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar]; 
NSDateComponents *components = [calendar components:(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit) fromDate:newDate]; 
[components setMonth:1]; 
[components setDay:1]; 
newDate = [calendar dateFromComponents:components]; 

이 내 날짜 선택기에서 잘 작동하지만 최대한 빨리 날짜 관련 코드를 디버깅하려고으로는, 일이 (시간의 TZ 관련 변화, 때로는 하루에) 매우 혼란 얻을 : 나는 같은 것을 할 . 누군가이 일을하는 방법에 대해 조언 할 수 있습니까?

날짜 작성기 (아마도!)를 사용해야하는 경우 코드를 너무 복잡하게 만들지 않고 쉽게 디버깅 할 수 있도록 어떻게해야합니까?

+0

NSDate 카테고리를 작성하고 * 설명 * 메소드를 대체하는 것이 좋은가요? – markjs

답변

0

NSDate는 유닉스 시간을 감싸는 래퍼이며, 시간대를 전혀 인식하지 못하기 때문에 실제적으로 어떤 종류의 시간대를 사용하는 날짜 포맷터가 될 수 있습니다.

비슷한 문제를 다루기 때문에 모든 NSDate 객체에 UTC 날짜를 사용하도록 강요했습니다 ("시간"구성 요소 자체는 걱정하지 않아도됩니다).

새 NSCalendar 인스턴스를 timezone 속성을 UTC로 설정하여 해당 날짜로 설정해야하지만, 일정한 날짜를 처리하는 방법으로 UTC 표준 시간대 설정 포맷터를 사용하거나 UTC 필요에 따라 Calendar를 구성 요소로 분리하십시오.

+0

불행히도 시간대를 무시하는 사치가 없습니다. 그러나 디버깅을 위해서는 NSDate 인스턴스에 대해보다 유익한 discription을 사용하는 것이 좋을 것입니다. 바람직하게는 현재 시스템 시간대를 사용하는 것입니다. 내 문제는 : 어떻게 현재 TZ를 사용하여 NSDate 인스턴스를 표시 할 수 있지만 아주 작은 코드 (그래서 그것은 한 줄 디버깅 명령에서 사용할 수 있습니다)? – markjs