2009-04-23 22 views
19

tengo el siguiente código:Descripción Cadena de NSDate

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

quiero que vuelva una fecha en el siguiente formato: "2009-04-23"

pero vuelve: Jueves de abril de 23, 2009 11:27:03 PM GMT + 03: 00

¿Qué estoy haciendo mal?

Gracias de antemano.

Respuesta

32

Está utilizando el método incorrecto. En lugar de tratar descriptionWithCalendarFormat:timeZone:locale:

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

También tenga en cuenta que el método está esperando un formato diferente a la que en su pregunta. La documentación completa se puede encontrar en here.

EDITAR: Aunque como señaló Mike, realmente debería usar NSDateFormatter. Hay algunos problemas con descriptionWithCalendarFormat:timezone:locale: que Apple menciona en la documentación.

+2

Depreciated .... –

+4

@NicHubbard: Este método no está desaprobado ni depreciado. Al menos a partir de 10.6 (la versión actual de Mac OS X). –

+4

Pero parece ser para iOS. Hora de ser detallado y usar NSDateFormatter. – eddieroger

1

Si no tiene disponible NSDate -descriptionWithCalendarFormat:timeZone:locale: (no creo que el iPhone/Cocoa Touch lo incluya), puede necesitar usar strftime y usar algunas cuerdas estilo C. Puede obtener la marca de tiempo de UNIX desde un NSDate usando NSDate -timeIntervalSince1970.

+0

Supongo que este es el estándar de Cocoa, ya que descriptionWithLocale tampoco existe en el iPhone. –

+0

Buen punto. Vi otra pregunta similar que estaba relacionada con el iPhone, así que creo que volveré a publicar esta respuesta allí. – pix0r

10

También tenga en cuenta que para la mayoría de los casos, NSDateFormatter es preferible por su flexibilidad.

También hay un beneficio de rendimiento significativo que se obtiene de la reutilización de formateadores de fecha en muchas aplicaciones.

+0

¿Qué flexibilidad? –

+1

Me estás tomando el pelo, ¿verdad? ¡Solo mira los documentos para ver qué tan configurable es! –

+1

Yo no bromeo. Simplemente estoy preguntando cuál de las muchas y variadas flexibilidades que NSDateFormatter tiene realmente tiene relación con la cuestión. –

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

Por razones de configuración regional, no debe establecer explícitamente los formatos de fecha y hora. En su lugar, use los estilos compatibles con la configuración regional: '[dateFormatter setDateStyle: NSDateFormatterMediumStyle]; [dateFormatter setTimeStyle: NSDateFormatterMediumStyle]; ' –

+1

@GrahamPerks eso no siempre es cierto. ¿Qué sucede si, por ejemplo, está generando una fecha para enviar a una API web que deberá ser analizada por el servidor? –

+1

Bastante justo. Señalo no copiar ciegamente el código en la respuesta; si la cadena va a ser vista por un usuario, necesita un ajuste. –