为什么我得到错误的时间输出与正确的时区



为什么我得到这个输出时间:

2013-01-12 18:24:37.783代码测试[10328:c07] 0001-01-01 17:12:52 +0000

当我运行这段代码时:

NSCalendar *calendar = [NSCalendar currentCalendar];
calendar.timeZone = [NSTimeZone localTimeZone];
NSDateComponents *components = [calendar components:NSHourCalendarUnit fromDate:[NSDate date]];
components.hour   = 17;
components.minute = 47;
components.second = 0;
NSDate *fire = [calendar dateFromComponents:components];
NSLog(@"%@", fire);

我试过默认时区,系统时区。它总是给我一个不同的分钟和秒的输出!加上错误的日期0001-01-01!!!!知道为什么吗?

额外的测试:

当运行此代码时:

NSCalendar *calendar = [NSCalendar currentCalendar];
calendar.timeZone = [NSTimeZone localTimeZone];
NSDateComponents *components = [calendar components:NSHourCalendarUnit fromDate:[NSDate date]];
components.hour   = (components.hour + 1) % 24;
components.minute = 0;
components.second = 0;
NSDate *fire = [calendar dateFromComponents:components];
NSLog(@"%@", fire);

它给我这样的输出:

2013-01-12 18:41:41.552代码测试[10648:c07] 0001-01-01 18:25:52 +0000

2013-01-12 18:42:16.274代码测试[10648:c07] 0001-01-01 18:25:52 +0000

2013-01-12 18:42:30.310代码测试[10648:c07] 0001-01-01 18:25:52 +0000

您缺少年、月、日组件。

:

NSDateComponents *components = [calendar components:NSUIntegerMax fromDate:[NSDate date]];

现在应该给你正确的日期了。

旁注:由于NSCalendarUnitNSUInteger的位域类型定义,我传入NSUIntegerMax以检索所有可能的日历单位。这样我就不需要大量的按位或语句

您还需要使用calendar components:方法请求年、月和日。

From Apple docs:

NSDateComponents的实例不负责应答关于日期的问题超出了它所包含的信息初始化。

NSDateComponents *components = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit fromDate:[NSDate date]];
日期的NSLog将显示默认时区的时间

相关内容

  • 没有找到相关文章

最新更新