2009-04-23 13 views
19

У меня есть следующий код:Строка описание NSDate

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

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

Но возвращается: Четверг, Апрель 23, 2009 11:27:03 PM GMT + 03: 00

Что я делаю неправильно?

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

ответ

32

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

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

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

EDIT: Хотя, как отметил Майк, вы действительно должны использовать NSDateFormatter. Есть некоторые проблемы с descriptionWithCalendarFormat:timezone:locale:, которые Apple упоминает в документации.

+2

Амортизированный .... –

+4

@NicHubbard: Этот метод не является ни устаревшим, ни обесценившимся. По крайней мере, с 10.6 (текущая версия Mac OS X). –

+4

Но это похоже на iOS. Время быть подробным и использовать NSDateFormatter. – eddieroger

1

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

+0

Я предполагаю, что это стандартное какао, поскольку описаниеWeLale не существует и на iPhone. –

+0

Хорошая точка. Я видел другой аналогичный вопрос, связанный с iphone, поэтому я думаю, что я снова опубликую этот ответ. – pix0r

10

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

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

+0

Какая гибкость? –

+1

Вы издеваетесь надо мной? Просто просмотрите документы, чтобы узнать, насколько это возможно! –

+1

Я не ребенок. Я просто задаю вопрос о том, какие из множества и разнообразных гибких возможностей, которые NSDateFormatter имеет на самом деле имеет отношение к этому вопросу. –

91
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); 
+8

По причинам локали вы не должны явно указывать форматы даты и времени. Вместо этого используйте стили, совместимые с языком: '[dateFormatter setDateStyle: NSDateFormatterMediumStyle]; [dateFormatter setTimeStyle: NSDateFormatterMediumStyle]; ' –

+1

@GrahamPerks это не всегда так. Что, если, например, вы создаете дату для отправки в веб-api, которая должна быть проанализирована сервером? –

+1

Достаточно честный. Я указываю не слепо копировать код в ответ; если строка будет отображаться пользователем, она нуждается в настройке. –

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

  • Нет связанных вопросов^_^