2015-10-11 34 views
1

我希望每個人都能獲得特定區域設置的本週第一天。例如,在美國的一週,星期一從週日開始,其他國家開始。獲取objective-c中的第一天和最後一天

我想在每個人的星期一開始,這是因爲我想用這個SQLQuery。

我有這樣的:

NSDate *weekDay = [NSDate date]; //any date in the week in which to calculate the first or last weekday 
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDateComponents *components = [gregorian components:NSWeekdayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:weekDay]; 
[components setDay:([components day]-([components weekday]-[[NSCalendar currentCalendar] firstWeekday]))]; 

NSDate *firstWeekday = [gregorian dateFromComponents:components]; 
NSDate *lastWeekday = [[gregorian dateFromComponents:components] dateByAddingTimeInterval:7 * 24 * 3600 - 1]; 
NSLog(@"first - %@ \nlast - %@", firstWeekday, lastWeekday); 

如果您所在區域本週星期一開始,但如果與週日開始不回我想要什麼,工作正常。

所以,想象今天是2015年10月11日 星期日區域將返回星期11,最後一天的第一天,17 隨着週一區域將返回5日當週的第一天,最後一天11

我想在我的應用程序執行的任何地方返回第二個選項。

謝謝。 此致敬禮。

+0

作爲一個英國人的第一天,我一週上週一開始... – Wain

+0

更新,影響到美國的,但問題是相同... – Miguel

+0

您是否嘗試將日曆的語言環境設置爲systemLocale或設置firstWeekday? – Willeke

回答

5
NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; 

cal.firstWeekday = 2;// set first week day to Monday 
// 1: Sunday, 2: Monday, ..., 7:Saturday 

NSDate *now = [NSDate date]; 
NSDate *startOfTheWeek; 
NSDate *endOfWeek; 
NSTimeInterval interval; 
[cal rangeOfUnit:NSCalendarUnitWeekOfYear 
     startDate:&startOfTheWeek 
     interval:&interval 
     forDate:now]; 
//startOfTheWeek holds the beginning of the week 

endOfWeek = [startOfTheWeek dateByAddingTimeInterval:interval - 1]; 
// endOfWeek now holds the last second of the last week day 

[cal rangeOfUnit:NSCalendarUnitDay 
     startDate:&endOfWeek 
     interval:NULL 
     forDate:endOfWeek]; 
// endOfWeek now holds the beginning of the last week day 

測試:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
formatter.dateStyle = NSDateFormatterShortStyle; 
formatter.timeStyle = NSDateFormatterShortStyle; 

NSLog(@"start: %@", [formatter stringFromDate:startOfTheWeek]); 
NSLog(@"end: %@", [formatter stringFromDate:endOfWeek]); 

打印

start: 12.10.15, 00:00 
end: 18.10.15, 00:00 

因此週一是一週

如果我設置

的開始
cal.firstWeekday = 1; 

將打印

start: 11.10.15, 00:00 
end: 17.10.15, 00:00 

星期日是一週

+0

嗨: 非常感謝,但不幸的是,如果今天是星期天11,並且你執行了你的代碼,那麼系統返回的結果是一週中的第一天是星期日11,而不是星期一5 – Miguel

+0

當然,這不是一個到期的時區問題打印它?例如: – vikingosegundo

+0

:我在GMT + 2,它是1:12。因爲這是格林威治標準時間,因此在本週開始我會得到'2015-10-11 22:00:00 + 0000'。如果我添加2小時,它是'2015-10-12 00:00:00' – vikingosegundo

相關問題