2009-08-28 15 views
6

Guardo mis NSDates en un archivo en el formato internacional que obtienes cuando llamas a description en un NSDate.¿Convertir una descripción de NSDate en un NSDate?

Sin embargo, no sé cómo volver desde el formato de cadena a un objeto NSDate. NSDateFormatter parece estar limitado a un par de formatos, sin incluir el internacional.

¿Cómo debo volver desde el formato de cadena?

Respuesta

25

Jeff tiene razón, NSCoding es probablemente la forma preferida de serializar objetos NSDate. De todos modos, si realmente quiere/necesita guardar la fecha como una cadena de fecha simple esto podría ayudarlo:

En realidad, NSDateFormatter no está limitado a los formatos predefinidos. Puede establecer un formato personalizado arbitrario a través de la propiedad dateFormat. El siguiente código debería poder analizar cadenas de fechas en el "formato internacional", es decir. el formato NSDate 's -description utiliza:

NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss ZZZ"; 
NSDate* date = [dateFormatter dateFromString:@"2001-03-24 10:45:32 +0600"]; 

Para una referencia completa sobre la sintaxis de cadena de formato, echar un vistazo a la Unicode standard.

. Sin embargo, tenga cuidado con -description - el resultado de estos métodos suele estar dirigido a lectores humanos (por ejemplo, mensajes de registro) ¡y no se garantiza que no cambie su formato de salida en una nueva versión de SDK! Más bien debería usar el mismo formateador de fecha para serializar su objeto de fecha:

NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
dateFormatter.dateFormat = @"yyyy-MM-dd HH:mm:ss ZZZ"; 
NSString* dateString = [dateFormatter stringFromDate:[NSDate date]]; 
+0

Sí, necesito cadenas de fechas intercambiables multiplataforma. Esto debería resolverlo. ¡Gracias! –

0

me gustaría tratar de establecer un NSDateFormatter a analizar correctamente la cadena mediante el siguiente método:

- (NSDate *)dateFromString:(NSString *)string 

Nota que usted podría tomar un tiempo para conseguir la NSDateFormatter estableció justo para analizar correctamente la cadena de .

Si va a almacenar datos orientados a programas como este, también le recomiendo que los almacene en un formato de fácil acceso, por ejemplo, CFAbsoluteTime. Una vez que lo tiene en su programa, puede formatearlo en el formato internacional o en otra forma legible por personas.

4

En lugar de guardar la descripción en un archivo, ¿por qué no guardar el objeto en sí? NSDate se ajusta al protocolo NSCoding; guardar el objeto significa que no tiene que preocuparse por traducirlo. Vea el NSCoding protocol reference para más información.

0

Convertirlo a un formato NSDate acepta y luego realizar la conversión de nuevo.

Alternativamente, según el NSDate al que se refiera (!) InitWithString debe abarcar las fechas estándar internacionales.

+0

Desafortunadamente ahora, 'initWithString:' está en desuso. – ThomasW