1

Я хочу получить первый день текущей недели с конкретным языком для всех. Например, в США неделя начинается с воскресенья и других стран в понедельник.Получить первый день недели и последний день в объекте-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); 

Который работает хорошо, если в вашей местности неделя начинается с понедельника, но если начинается с воскресенья не возвращает то, что я хочу.

Итак, представьте, сегодня 11 2015 октябрь С воскресенья локали вернется в первый день недели 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», так как это GMT. Если я добавлю 2 часа, это будет '2015-10-12 00: 00: 00' – vikingosegundo

Смежные вопросы