2011-04-08 70 views
0

我使用以下代碼片段來推斷出一週中的第一天,以顯示在我的日曆視圖中。這個代碼一直沒有任何問題,直到我在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?

感謝和問候。

回答

4

我對這個方法調用瞭解得更多。看來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

相關問題