2012-06-13 5 views
0

Как рассчитать дату, имеющую только номер недели и день недели?Рассчитать дату с недельного номера

E.g. Неделя 24, вторник, 2012, где недели начинаются в понедельник.

+0

это может дать вам указатель http://stackoverflow.com/questions/2466022/how-to-find-weekday-from-todays-date-in-iphone-sdk – geminiCoder

ответ

1

Очень удобно, что 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]; 
+0

Он работает! Благодаря! :) – Oleg

+1

Как я писал выше, ваше решение отлично работает! Но теперь у меня есть другая проблема - она ​​обнаруживает дату на предыдущий день: 2012-06-11 22:00:00 +0000 вместо 2012-06-12 00:00:00. Я предполагаю, что это связано с TimeZones. Все мои даты должны быть в часовом поясе GMT ​​+ 2. Вы можете помочь с этим? – Oleg

+1

Хороший вопрос. Работа с часовыми поясами сложна и зависит от того, что вы хотите сделать, но если вас не волнует время и просто хочу дату, я думаю, что одно простое и безопасное обходное решение - работать в GMT (+0000). Чтобы сделать это, добавьте эту строку, прежде чем вы получите дату: '[gregorian setTimeZone: [NSTimeZone timeZoneWithName: @" GMT "]] ;;. Это работает для меня, но у кого-то может быть лучший ответ. –

0
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];