¿Cómo convierto una cadena que contenga "am / pm" a un NSDate cuando el dispositivo del usuario se establece en 24 horas en iOS?

Necesito convertir un NSString a un NSDate, pero el código siguiente solo funciona siempre y cuando el dispositivo del usuario no esté configurado en 24 horas.

NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; [formatter setDateFormat:@"MM/dd/yyyy hh:mm:ss a"]; NSString *aTime = @"2/11/2013 12:00:00 AM"; NSDate *aDate = [formatter dateFromString:aTime]; 

Sin embargo, aDate regresa nulo cuando el dispositivo está en el time de 24 horas. ¿Alguna ayuda?

Creo que probablemente veas un efecto secundario del comportamiento descrito por QA1480 . Apple ha resuelto lo que presumiblemente pensaba que los desarrolladores no obedecían correctamente a los locales al modificar su formatting de date prescrito a less que explícitamente diga no hacerlo.

Puede lograrlo agregando:

 formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; /* and autorelease if not using ARC */ 

Lo que básicamente dice 'el formatting de date que acabo de configurar es explícitamente lo que quiero, por favor no lo modifique de ninguna manera'.

  I think the following snippet might helps you out. NSString *dateString = @"09:34 AM"; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; dateFormatter.dateFormat = @"dd-MM-yyyy"; NSString *stringFromDate = [dateFormatter stringFromDate:[NSDate date]]; dateFormatter.dateFormat = @"dd-MM-yyyy hh:mm a"; dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; NSDate *returnDate = [dateFormatter dateFromString:[NSString stringWithFormat:@"%@ %@", stringFromDate, dateString]]; 

testing este codigo

 NSString *string = @"2015-11-30 15:00:00"; NSDateFormatter* formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"yyyy-MM-dd HH:mm:ss"; [formatter setTimeZone:[NSTimeZone localTimeZone]]; NSDate *date = [formatter dateFromString:string]; 

date: 2015-11-29 21:30:00 +0000

Está en formatting UTC ¡puedes modificarlo según lo necesites!