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

问题描述:

我使用以下代码片段来推断出一周中的第一天,以显示在我的日历视图中。这个代码一直没有任何问题,直到我在iPhone OS 4.3以上测试它。iPhone OS4.3:NSCalendar的[ordinalityOfUnit:inUnit:forDate:]方法返回不同/错误的结果

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

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

感谢和问候。

我对这个方法调用了解得更多。看来ordinalityOfUnit:inUnit:forDate:方法会关注当前的语言环境是什么以及该语言环境认为该周的第一天是什么。

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

如果你在美国的语言环境,并要求周二的排名,它将返回2(周日0,周一1,周二2)。然而,在爱尔兰语区域,它将返回1(星期一0和星期二1)。

简而言之,一周中的一天的排序取决于哪一天被认为是一周的开始。相反,如果您使用NSDateComponents API并从那里获取星期几,则您总是会获得相对于星期日===的一天。

NSDateComponents *components = [[self calendar] components: NSWeekdayCalendarUnit fromDate: [self startingDay]]; 
NSUInteger weekdayIndex = [components weekday]; 
+0

是的同意。后来我发现'ordinalityOfUnit ...'方法考虑了当前的语言环境。对于美国,它在星期天返回0。无法在此处发布调查结果。尽管感谢您的回复。 – 2012-03-22 10:59:21