0

我知道这NSDate不代表时区,但也许有人可以建议我如何最好地调试它与其他类的关系,NSDatePicker例如CalCalendarStore.

例如,我想将日期选择器的日期设置为 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 相关的一小时甚至一天的变化)。有人可以建议我如何做到这一点吗?

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

4

1 回答 1

0

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

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

您必须使用将时区属性设置为 UTC 的新 NSCalendar 实例来生成这些日期,但这样您就可以处理一致的日期,只需使用 UTC 时区设置格式化程序来显示它们,或者使用 UTC 设置日历来中断根据需要将它们组合成组件。

于 2012-06-18T12:26:29.257 回答