iPhone OS4.3:NSCalendar的[ordinalityOfUnit:inUnit:forDate:]方法返回不同/错误的结果

时间:2011-04-08 11:50:23

标签: nscalendar ios4

我正在使用我用于推断一周中第一天的代码段,以便在我的日历视图中显示。这段代码一直没有任何问题,直到我在iPhone OS 4.3上测试它。

int firstDOW = [m_calendar ordinalityOfUnit:NSWeekdayCalendarUnit inUnit:NSWeekCalendarUnit forDate:fom]%7;

其中'fom'是该月的第一个日期 调试代码时,在4.3之前的iOS上,“常规”方法的返回值似乎返回正确的值(例如,如果'fom'日期在星期五,则从上面的方法返回的值为'5')。但是在iOS> = 4.3时,返回值在某种程度上不是正确的工作日(例如,如果'fom'日期在星期五,则从上面的方法返回的值是'6'!)。 我不明白,我的代码是否有任何问题,或者它确实是上述方法中的错误 还有其他人在iOS> = 4.3 ??

中遇到过这种情况

谢谢和问候。

1 个答案:

答案 0 :(得分:4)

我对这个方法调用了解了一些。似乎ordinalityOfUnit:inUnit:forDate:方法注意当前的语言环境以及该语言环境在一周的第一天所考虑的内容。

例如。在美国的地区,一周的第一天被认为是星期日,而在爱尔兰的地方,一周的第一天被认为是星期一。

如果你在美国当地,并要求周二的常规,它将返回2(星期日为0,星期一为1,星期二为2)。但是,在爱尔兰语区域,它将返回1(星期一为0,星期二为1)。

简而言之,一周中的一天的正常性取决于考虑哪一天开始一周。相反,如果您使用NSDateComponents API并从那里获取星期几,那么您总是得到相对于星期日=== 0的一天。例如

NSDateComponents *components = [[self calendar] components: NSWeekdayCalendarUnit fromDate: [self startingDay]];
NSUInteger weekdayIndex = [components weekday];
相关问题