【问题标题】:How to best debug NSDate / NSTimezone related code如何最好地调试 NSDate / NSTimezone 相关代码
【发布时间】:2012-06-18 12:09:41
【问题描述】:

我知道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];

这在我的日期选择器中运行良好,但是一旦我尝试调试与日期相关的代码,事情就会变得非常混乱(与 TZ 相关的一小时甚至一天的班次)。有人可以建议我如何做到这一点吗?

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

【问题讨论】:

  • 写一个NSDate 类别并覆盖description 方法是个好主意吗?

标签: objective-c cocoa debugging nsdate nstimezone


【解决方案1】:

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

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

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

【讨论】:

  • 不幸的是,我没有忽略时区的奢侈。但是对于调试,最好有一个 NSDate 实例的信息更丰富的描述,最好是使用当前系统时区的描述。我的问题是:如何使用当前 TZ 显示 NSDate 实例,但代码很少(因此可以在 1 行调试命令中使用)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-27
  • 1970-01-01
  • 2016-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多