crear un NSDate a partir de una cadena

Tengo un NSString así: @"3/15/2012 9:15 PM" y me gustaría convertirlo a NSDate , he hecho así:

 NSString *str =@"3/15/2012 9:15 PM"; NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; [formatter setDateFormat:@"mm/dd/yyyy HH:mm"]; NSDate *date = [formatter dateFromString:]; NSLog(@"%@", date); // date = null 

¿Puedes ayudarme por favor, gracias?

Use la siguiente solución

 NSString *str =@"3/15/2012 9:15 PM"; NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; [formatter setDateFormat:@"MM/dd/yyyy HH:mm a"]; NSDate *date = [formatter dateFromString:str]; NSLog(@"%@",date); 

Edit: Lo sentimos, el formatting debe ser el siguiente

 [formatter setDateFormat:@"MM/dd/yyyy hh:mm a"]; 

Y el time que se muestra será el horario GMT. Entonces, si agrega / less la zona horaria, serían las 9:15 PM.

Editar: n. ° 2

Use como se muestra a continuación. También obtendrás time exacto.

 NSString *str =@"3/15/2012 9:15 PM"; NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; [formatter setDateFormat:@"MM/dd/yyyy hh:mm a"]; NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; [formatter setTimeZone:gmt]; NSDate *date = [formatter dateFromString:str]; NSLog(@"%@",date); 

Su formateador está equivocado. Según la documentation de NSDateFormatter, debería ser "MM / dd / aaaa h: mm a". También es probable que desee establecer la configuration regional como se indica en la Guía de formatting de date:

Si está trabajando con dates de formatting fijo, primero debe establecer la configuration regional del formateador de date en algo apropiado para su formatting fijo. En la mayoría de los casos, la mejor opción para elegir es en_US_POSIX, una configuration regional específicamente diseñada para get resultados en inglés de EE. UU. Independientemente de las preferences del usuario y del sistema.

Prueba esto:

 NSString *str = @"3/15/2012 9:15 AM"; NSLocale *enUSPOSIXLocale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]; NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; [formatter setLocale:enUSPOSIXLocale]; [formatter setDateFormat:@"MM/dd/yyyy h:mm a"]; NSDate *date = [formatter dateFromString:str]; NSLog(@"%@",date); 

Salidas:

 2012-03-19 12:37:27.531 Untitled[6554:707] 2012-03-15 08:15:00 +0000 

Hmmm: te has equivocado por un par de razones

  1. NSDateFormatter es estricto y no ha sido.
  2. No suministraste str a dateFromString:
 NSString* str = @"3/15/2012 9:15 PM"; NSDateFormatter* formatter = [[NSDateFormatter alloc]init]; [formatter setDateFormat:@"MM/dd/yyyy HH:mm a"]; NSDate* date = [formatter dateFromString:str]; NSLog(@"%@",date); 
  NSString *str =@"3/15/2012 9:15 PM"; NSDateFormatter *dateformatter = [[NSDateFormatter alloc]init]; [dateformatter setDateFormat:@"MM/dd/yyyy"]; NSArray *firstSplit = [str componentsSeparatedByString:@" "]; NSDate *dateSelected = [dateformatter dateFromString:[firstSplit objectAtIndex:0]]; [dateformatter setDateFormat:@"mm:ss"]; NSDate *dateSelected2 = [dateformatter dateFromString:[firstSplit objectAtIndex:1]]; NSLog(@"%@",[dateformatter stringFromDate:dateSelected2]); NSLog(@"%@",[dateformatter stringFromDate:dateSelected]); 

Establezca su formatting de esta forma:

 [formatter setDateFormat:@"MM/dd/yyyy HH:mm a"];