如何最好地调试NSDate / NSTimezone相关代码

时间:2012-06-18 12:09:41

标签: objective-c cocoa debugging nsdate nstimezone

我知道NSDate并不代表时区,但也许有人可以告诉我如何最好地调试其与其他类的关系,例如NSDatePickerCalCalendarStore

例如,我想将日期选择器的日期设置为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];

这在我的datepicker中工作正常,但是一旦我尝试调试与日期相关的代码,事情就会变得非常混乱(TZ相关的班次在一小时内,有时甚至是一天)。有人可以告诉我如何做到这一点?

如果我应该使用日期格式化程序(可能!),我应该如何做到这一点,以便我可以轻松调试而不会过多地混淆代码?

1 个答案:

答案 0 :(得分:0)

NSDate只是unix时间的一个包装器,因此根本不是时区感知,它实际上是你的日期格式化器,可以在其上放置任何类型的时区。

处理类似问题我最终只是强迫所有NSDate对象使用UTC日期(当不担心“时间”组件本身时)。

您必须使用时区属性设置为UTC的新NSCalendar实例来创建这些日期,但这样您将处理一致日期,只需使用UTC时区设置格式化程序来显示它们,或者使用UTC集日历根据需要将它们分解为组件。