Строковое описание NSDate - PullRequest
19 голосов
/ 24 апреля 2009

У меня есть следующий код:

[ [NSDate date] descriptionWithLocale: @"yyyy-MM-dd" ]

Я хочу вернуть дату в следующем формате: «2009-04-23»

Но возвращается: четверг, 23 апреля 2009 г., 23:27:03 GMT + 03: 00

Что я делаю не так?

Заранее спасибо.

Ответы [ 4 ]

91 голосов
/ 20 сентября 2010
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];
[dateFormatter release];  // delete this line if your project uses ARC
NSLog(@"%@",dateString); 
32 голосов
/ 24 апреля 2009

Вы используете неправильный метод. Вместо этого попробуйте descriptionWithCalendarFormat:timeZone:locale:

[[NSDate date] descriptionWithCalendarFormat:@"%Y-%m-%d"
                                    timezone:nil
                                      locale:nil];

Также обратите внимание, что метод ожидает формат, отличный от того, который указан в вашем вопросе. Полную документацию по этому вопросу можно найти здесь .

РЕДАКТИРОВАТЬ: Хотя, как отметил Майк, вы действительно должны использовать NSDateFormatter. Есть некоторые проблемы с descriptionWithCalendarFormat:timezone:locale:, которые Apple упоминает в документации.

10 голосов
/ 24 апреля 2009

Также обратите внимание, что в большинстве случаев, NSDateFormatter предпочтительнее для его гибкости.

Существует также значительное преимущество в производительности от повторного использования форматеров даты во многих приложениях.

1 голос
/ 24 апреля 2009

Если у вас нет NSDate -descriptionWithCalendarFormat:timeZone:locale: (я не верю, что iPhone / Cocoa Touch включает это), вам может понадобиться strftime и обезьяна с некоторыми строками в стиле C. Вы можете получить метку времени UNIX от NSDate, используя NSDate -timeIntervalSince1970.

...