2014-05-15 78 views
4

鑑於NSDate,如何根據用戶的區域設置找到該日期的第一天。例如,我聽說有些國家將星期一作爲一週的第一天,而其他國家則用星期天。在第一種情況下,我需要返回前一個星期一,而在後一個例子中的前一個星期日。查找依賴區域的第一週的第一天

我最大的努力迄今總是返回前面的週日,不管設備設置適用於:

NSCalendar *calendar = [NSCalendar currentCalendar]; 
[calendar setLocale:[NSLocale currentLocale]]; 
NSDateComponents *components = [calendar components:NSYearForWeekOfYearCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit fromDate:originalDate]; 
[components setWeekday:1]; 
NSDate *firstDayOfWeek = [calendar dateFromComponents:components]; 

獎金的問題:在iOS上,它設置驅動器呢?這是'地區格式'嗎?

+0

另請參閱http://stackoverflow.com/questions/16876813/cocoa-get-first-day-in-week?rq=1它解決了同樣的問題。 – rmaddy

回答

5

嘗試改變:

[components setWeekday:1]; 

到:

[components setWeekday:[calendar firstWeekday]]; 

你也應該刪除NSYearForWeekOfYearCalendarUnitNSWeekCalendarUnit組件。

紅利問題:「地區格式」應該是改變一週的第一天的設置。

+0

謝謝 - 我讀到NSYearForWeekOfYearCalendarUnit和NSWeekCalendarUnit是處理日期的必要條件,例如1月2日星期三,前一個工作日是前一年。我會看看我能否找到源代碼。 –

+1

@BenPackard我承認我建議刪除它們,因爲這些看起來並不必要。我不確定。 – rmaddy

0

對於那些不想首先設置日曆的人來說,老式的更智能的方法是週日。

NSDate *date = [NSDate dateWithTimeIntervalSince1970:1483620311.228]; 
NSLog(@"current date ===> : %@", date); 
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 
NSDate *previousMonday = [calendar nextDateAfterDate:date 
            matchingUnit:NSCalendarUnitWeekday 
              value:2 //use 1-7 for Sunday to Saturday week day. 
             options:NSCalendarMatchNextTime | NSCalendarSearchBackwards]; 
NSLog(@"previousMonday date ===> : %@", previousMonday);