0

我遵循了我用来推断一周的第一天的代码片段,以显示在我的日历视图中。这段代码一直运行没有任何问题,直到我在 iPhone OS 4.3 及更高版本上对其进行了测试。

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

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

谢谢并恭祝安康。

4

1 回答 1

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];
于 2011-10-10T18:32:10.100 回答