Как узнать, какой день недели для любой даты с помощью Cocoa?

Я знаю, что это повторяющийся запрос, но я застрял с этой проблемой. Мне нужно знать, как я могу получить такой день, как понедельник, вторник для определенной даты, например: 18 июля 2010 г. и т. д.

ценю вашу помощь!!


person Manoj    schedule 18.07.2011    source источник
comment
Возможно, это поможет stackoverflow.com/questions/3694867/nsdate- получить-год-месяц-день?   -  person Mat    schedule 18.07.2011
comment
Вы пытаетесь распечатать понедельник, если это так, вы захотите использовать NSDateFormatter   -  person Greg Martin    schedule 18.07.2011
comment
@Greg: я просто написал аббревиатуру, но это должно быть понедельник, вторник и т. д.   -  person Manoj    schedule 18.07.2011
comment
Правильно, я имею в виду, вы ищете текстовую версию, а не числовое представление. Ознакомьтесь с документацией для NSDateFormatter. Существуют строки форматирования, которые дадут вам практически любой вариант того, что вы просите.   -  person Greg Martin    schedule 18.07.2011
comment
@Greg: это должно быть в числовом представлении. например: воскресенье = 0, понедельник = 1 и т. д.   -  person Manoj    schedule 18.07.2011
comment
В этом случае это дубликат, и размещенная @Mat ссылка должна вам помочь.   -  person Greg Martin    schedule 18.07.2011
comment
Это мне не поможет. В любом случае спасибо.   -  person Manoj    schedule 18.07.2011


Ответы (3)


NSString *dateString = @"20 July, 2011"; // select this from your database

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"dd MMMM, yyyy"];
NSDate *date = [dateFormatter dateFromString:dateString];

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [gregorian components:NSWeekdayCalendarUnit fromDate:date];
NSInteger weekday = [components weekday];
NSLog(@"%d", weekday);

Обратите внимание, что воскресенье — это 1.
2 — это понедельник и т. д.

Отредактировал мой ответ, чтобы показать вам пример того, как преобразовать строку в NSDate. ;)

person Christian Schnorr    schedule 18.07.2011
comment
Решение pawan.mangal вернет день недели в виде строки, возможно, даже локализованной. Однако, если вы хотите сохранить его в базе данных или чем-то подобном, целое число может быть более полезным. - person Christian Schnorr; 18.07.2011
comment
Вы каждый раз проверяете текущую дату, скажем, я выбираю 11 декабря 2007 года из своего списка, я хотел указать номер дня для этого конкретного дня. Надеюсь, я вам понятен. - person Manoj; 18.07.2011
comment
Что ж, вам придется преобразовать эту строку (?) в NSDate и использовать ее вместо [дата NSDate]; ;) - person Christian Schnorr; 18.07.2011
comment
В SO достаточно кодов, чтобы показать вам, как создать объект NSDate для другой даты, а не для текущей. - person vikingosegundo; 18.07.2011
comment
Добавлен пример получения NSDate из строки. - person Christian Schnorr; 18.07.2011
comment
Спасибо, Дженокс. Это было действительно полезно, хотя было глупо просить преобразовать строку в NSDate. - person Manoj; 18.07.2011

Чтобы распечатать текстовое представление дня и NSDate, попробуйте следующее:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"EEEE"];
[dateFormatter release];

NSDate *myDate = [NSDate date];

NSString *day = [dateFormatter stringFromDate:myDate];

Для получения дополнительной информации о http://unicode.org/reports/tr35/tr35-10.html#Date_Format_Patterns

person Greg Martin    schedule 18.07.2011

попробуй это

NSDateFormatter* theDateFormatter = [[[NSDateFormatter alloc] init] autorelease];
    [theDateFormatter setFormatterBehavior:NSDateFormatterBehavior10_4];
    [theDateFormatter setDateFormat:@"EEEE"];
    NSString *weekDay =  [theDateFormatter stringFromDate:[NSDate date]];
person iOSPawan    schedule 18.07.2011
comment
Пожалуйста, проверьте мои комментарии к ответу Дженокса. - person Manoj; 18.07.2011