Как рассчитать дату, имеющую только номер недели и день недели?Рассчитать дату с недельного номера
E.g. Неделя 24, вторник, 2012, где недели начинаются в понедельник.
Как рассчитать дату, имеющую только номер недели и день недели?Рассчитать дату с недельного номера
E.g. Неделя 24, вторник, 2012, где недели начинаются в понедельник.
Очень удобно, что NSCalendar выполнит всю математику для вас. Во-первых, установить параметры с помощью NSDateComponents:
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setWeek:24];
[comps setWeekday:3]; //map weekday names to numbers (e.g., Sunday is 1)
[comps setYear:2012];
Затем создать григорианский календарь с этими компонентами дата:
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
и захватить ваш NSDate:
NSDate *date = [gregorian dateFromComponents:comps];
Он работает! Благодаря! :) – Oleg
Как я писал выше, ваше решение отлично работает! Но теперь у меня есть другая проблема - она обнаруживает дату на предыдущий день: 2012-06-11 22:00:00 +0000 вместо 2012-06-12 00:00:00. Я предполагаю, что это связано с TimeZones. Все мои даты должны быть в часовом поясе GMT + 2. Вы можете помочь с этим? – Oleg
Хороший вопрос. Работа с часовыми поясами сложна и зависит от того, что вы хотите сделать, но если вас не волнует время и просто хочу дату, я думаю, что одно простое и безопасное обходное решение - работать в GMT (+0000). Чтобы сделать это, добавьте эту строку, прежде чем вы получите дату: '[gregorian setTimeZone: [NSTimeZone timeZoneWithName: @" GMT "]] ;;. Это работает для меня, но у кого-то может быть лучший ответ. –
NSDate *now = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *comp = [gregorian components:NSYearCalendarUnit fromDate:now];
[comp setWeek:24];
[comp setDay:1];
NSDate *resultDate = [gregorian dateFromComponents:comp];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMM d, yyyy"];
NSString *myDateString = [formatter stringFromDate:resultDate];
[gregorian release]; // Clean up allocated objects by releasing them
[formatter release];
NSString * date = [NSString stringWithFormat:@"Week of %@", myDateString];
это может дать вам указатель http://stackoverflow.com/questions/2466022/how-to-find-weekday-from-todays-date-in-iphone-sdk – geminiCoder