【问题标题】:Difference between NSDate and NSDateComponent value for the same date同一日期的 NSDate 和 NSDateComponent 值之间的差异
【发布时间】:2011-07-30 03:55:06
【问题描述】:

我创建了一个简单的函数来获取其中一天的第一天和最后一天。 查看 NSLog 输出,我发现同一日期的 NSDate 描述符和组件日返回了不同的值,为什么?

这里 NSLog 输出:

NSDATE: 2011-04-03 22:00:00 +0000, DAY COMPONENT: 4 
NSDATE: 2011-04-09 22:00:00 +0000, DAY COMPONENT: 10 

如您所见,NSDATE 是 4 月 3 日,第一行的日期分量是 4,第二行分别是 9 和 10。

代码如下:

NSDate *date = [NSDate date]; //Today is  April 5th 2011
NSCalendar *cal =[[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];

[cal setFirstWeekday:2]; //My week starts from Monday

//DEFINE BEGINNING OF THE WEEK
NSDate *beginningOfWeek = nil;
[cal rangeOfUnit:NSWeekCalendarUnit startDate:&beginningOfWeek interval:nil forDate:date];
NSDateComponents *beginComponents = [cal components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit) fromDate:beginningOfWeek];

//DEFINE END OF THE WEEK, WITH 6 days OFFSET FROM BEGINNING
NSDateComponents *offset = [[NSDateComponents alloc]init];
[offset setDay:6];
NSDate *endOfWeek = [cal dateByAddingComponents:offset toDate:beginningOfWeek options:0];
NSDateComponents *endComponents = [cal components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit) fromDate:endOfWeek];

NSLog(@"NSDATE: %@, DAY COMPONENT: %d",beginningOfWeek, [beginComponents day]);
NSLog(@"NSDATE: %@, DAY COMPONENT: %d",endOfWeek,       [endComponents day]);

【问题讨论】:

  • 我得到当前日期输出,我看到它提前了 2 小时。在我启动该功能的日期,我的时钟是 19:16,看这里的输出:“TODAY 2011-04-05 17:16:20 +0000”是 17.16 而不是 19.16。在我的问题中,我看到输出也提前 2 小时报告 22:00 而不是 24:00(因此,正确的一天)

标签: objective-c ios nsdate


【解决方案1】:

打印您的日期时区为 +0000 (UTC),而您的 NSCalendar 实例(因此您的 NSDateComponents)正在使用您设备的默认时区(我猜是 UTC+2)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 2017-03-10
    • 2012-12-11
    • 2019-09-25
    • 2011-02-01
    • 2013-01-28
    相关资源
    最近更新 更多