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

Iphone 使用weeks时,NSCalendar dateFromComponents返回错误的值,iphone,ios,xcode,nsdate,Iphone,Ios,Xcode,Nsdate,所以我试着得到这个星期的约会范围 当我得到当前日期组件(仅年和日期)时,这些值是: 我注意到在近一周的时间里有一篇“过时”的文章。我尝试过搜索苹果的文档,但没有找到任何相关信息 然后,我尝试使用当前日历(或公历,相同值)获取NSDate,但得到的值是: 所以周被忽略了。因此,我在我的组件中添加了几个月零一个星期,并有了这样的组件: 然后我试着让我的约会对象离开这里,这就是我得到的: 现在很明显,周组件在这里被忽略了。为什么会这样?它被弃用了吗?或者它是某种错误?即使我对我的问题没有答案,

所以我试着得到这个星期的约会范围

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

我注意到在近一周的时间里有一篇“过时”的文章。我尝试过搜索苹果的文档,但没有找到任何相关信息

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

所以周被忽略了。因此,我在我的组件中添加了几个月零一个星期,并有了这样的组件:

然后我试着让我的约会对象离开这里,这就是我得到的:


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

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

所以我花了几个星期,把它们乘以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

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

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);
若要在一周前计算相同的日期,请使用添加组件的日期:

NSDate *now = [NSDate date];
NSDateComponents *comp = [[NSDateComponents alloc] init];
[comp setWeek:-1]; // One week back in time
NSDate *date = [[NSCalendar currentCalendar] dateByAddingComponents:comp toDate:now options:0];
NSLog(@"%@", now);
NSLog(@"%@", date);

所以我终于找到了解决办法

如果您只设置了工作日,它似乎会进行所有排序(开始工作):

[startDate setWeekday:1];
然后正确返回带有星期的日期


不知道在不设置工作日的情况下忽略周组件是否仍然是错误。

插入代码,而不是图像。帖子上的
{}
按钮可以很好地格式化代码。对于值do
po endDate
,例如,在控制台中以文本形式列出值。好的,从现在开始将这样做。我只是用图像来证明数值是准确的(我确实看到很多人回答“你真的得到了正确的数值吗?”)。所以你的任务是计算当前一周的开始和结束?我的任务是生成两个日期,这将定义“今天”、“昨天”或“前一周的同一天”的含义。所以答案是±yesPerhaps,您可以发布一个完整的代码示例,其中包含输入和输出。然后我们可能会指出是否有“更好”的解决方案。我不能发布代码本身(严格的策略),但我可以说输入是一个字符串,它定义了一些“移动日期”,如“昨天”、“SameDayWeekBefore”、“LastWeek”、“SameWeekYearBefore”等等,输出是表示字符串的日期,如2013年5月16日00:00-23:59,如果您在5月17日计算“昨天”。检测,计算,一切正常。我处理半年,季度(单位不工作,苹果虫)等等。本周是这里唯一的问题。我对它进行了测试,但它不起作用。是的,你的解决方案起作用了。所以我看到datebyAddingComponents和week起作用,但是dateFromComponents和week不起作用。对我来说这听起来像个虫子。