NSDateFormatter iOS, patrón de date

Simplemente no puedo entender cómo establecer el formatting de date NSDateFormatter para que [formatter dateWithString:] no devuelva un cero.

La date se ve de la siguiente manera:

2008-08-18T14: 32: 22.1875000 + 01: 00

Lo intenté

formatter setDateFormat:@"yyyy-MM-ddTHH:mm:ss.fffffffzz+GMT"]; 

Parece que no funciona :(. Cualquier sugerencia, por favor ayuda.

Ok gracias por responder, parece que engaño a las personas con mi pregunta un poco, así que trato de reformularlo, lo siento por eso, tal vez sea un poco tarde para la progtwigción. Necesito un object contenedor de date, así que no tengo que analizar la cadena que contiene la date yo mismo. Básicamente obtengo una cadena de una database que necesito analizar, puedo usarla en mi interfaz de usuario.

 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZZZZ"; formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; NSDate *date = [formatter dateFromString:@"2008-08-18T14:32:22.1875000+01:00"]; NSLog(@"%@", date); 

Eso imprime nada

Lo que quiero es NSString-> NSDat, así que puedo preguntarle qué mes contiene o qué hora contiene. Veo ahora que NSDate no tiene dicho método. Eso fue una tontería asumir. ¿Alguna idea ahora?

Según la documentation unicode, no hay f . Suponiendo que desee subsegundos, debe ser S. También debe poner la T entre comillas si quiere que se transfiera literalmente. Creo que también estás confundido con z , y probablemente quieras ZZZZ en lugar de zz + GMT . Asi que:

 NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease]; formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZZZZ"; NSLog(@"%@", [formatter stringFromDate:[NSDate date]]); 

Según el QA1480 , es posible que también desee establecer explícitamente una configuration regional de en_US_POSIX , si desea generar una cadena técnica para el almacenamiento. Se reserva el derecho de ajustar los campos solicitados de lo contrario según la configuration regional actual, suponiendo que desee mostrar la cadena. Entonces eso sería:

 NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease]; formatter.locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]; formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZZZZ"; NSLog(@"%@", [formatter stringFromDate:[NSDate date]]); 

Según la respuesta de Ctrahey, que no obtiene el formatting que desea, que termina en, por ejemplo,

 012-06-22T16:44:32.9310000GMT-07:00 

es decir, las letras 'GMT' se han deslizado allí. Cambiar a una sola Z elimina la reference explícita a GMT, pero también elimina los dos puntos.

Editar: por su código de ejemplo:

 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZZZZ"; formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; NSDate *date = [formatter dateFromString:@"2008-08-18T14:32:22.1875000+01:00"]; NSLog(@"%@", date); 

Eso falla porque su cadena de input no coincide con el formatting de date suministrado: le faltan las letras GMT antes del +01: 00. Dado que no parece haber una cadena de date unicode que coincida exactamente con la que tiene en su database, probablemente lo más fácil sea eliminar los dos puntos. P.ej

 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"yyyy-MM-dd'T'HHmmss.SSSSSSSZ"; formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; NSString *sourceString = @"2008-08-18T14:32:22.1875000+01:00"; NSDate *date = [formatter dateFromString:[sourceString stringByReplacingOccurrencesOfString:@":" withString:@""]]; NSLog(@"%@", date); 

Para mí eso 2008-08-18 13:32:22 +0000 .

Lo más cercano que pude get solo deja los dos puntos en la zona desplazada cerca del final:

 [formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ"]; 

Cuál se parece a esto: 2012-06-22T16: 40: 46.6290000-0700

La documentation que estaba usando está aquí , ya que está vinculada desde Apple