使用周时,NSCalendar dateFromComponents返回错误的值

时间:2013-05-21 15:21:22

标签: iphone ios xcode nsdate

所以我试着获得这周的日期范围。

当我获得当前日期组件(仅年份和日期)时,这些是值:

enter image description here

我注意到附近有“Obsolescent”写道。尝试搜索苹果文档,但没有发现任何相关内容。

然后我尝试使用当前日历(或格里高利历,相同值)获取NSDate,但我得到的值是:

enter image description here

所以周被忽略了。所以我在我的组件中添加了几个月和一周的时间并且有这样的组件:

enter image description here

然后我试图从这里得到我的约会,这就是我得到的:

enter image description here

现在很明显,周组件在这里被忽略了。为什么会这样?它被弃用了吗?或者是一些错误?

3 个答案:

答案 0 :(得分:2)

所以我最终找到了解决方案。

如果你只是设置工作日,它似乎都可以解决(开始工作):

[startDate setWeekday:1];

然后正确返回带星期的日期。

如果在没有设置工作日的情况下忽略周组件,不知道它是否仍然是一个错误。

答案 1 :(得分:1)

要计算一周的开始结束日期,rangeOfUnit:startDate:interval:forDate:的{​​{1}}方法非常有用:

NSCalendar

要计算一周前的相同日期,请使用NSDate *now = [NSDate date]; NSDate *startOfWeek; NSTimeInterval length; [[NSCalendar currentCalendar] rangeOfUnit:NSWeekCalendarUnit startDate:&startOfWeek interval:&length forDate:now]; NSDate *endOfWeek = [startOfWeek dateByAddingTimeInterval:length]; NSLog(@"%@", startOfWeek); NSLog(@"%@", endOfWeek);

dateByAddingComponents

答案 2 :(得分:0)

即使我对我的问题没有答案,我也会发布我使用的这个问题的解决方案。

所以我花了几个星期的时间将它们乘以7.这给了我当前的结束日期。我知道这不好,因为几周可以设置不同的日期等等。但对于我最常见的默认问题(格里高利日历,每周7天),这个解决方案在已有的日期时间计算器中快速解决。

[components setDay:components.week * 7 - 7];                                //Start of week
        startDate = [[NSCalendar currentCalendar] dateFromComponents:components];
        [components setDay:components.day + 7];                                     //End of week
        endDate = [[NSCalendar currentCalendar] dateFromComponents:components];
        [components setDay:0];                                                      //I am using this not just here so i am setting back my changes