2012-03-19 11 views
25

Tengo una NSString así: @"3/15/2012 9:15 PM" y me gustaría convertirlo en NSDate, he hecho de esta manera:crear un NSDate de una cadena

NSString *str [email protected]"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 

¿Me puede ayudar por favor, gracias.

+0

posible duplicado de [convertir cadena a NSDate] (http://stackoverflow.com/questions/2311421/convert-string- to-nsdate) –

Respuesta

55

Utilice la siguiente solución

NSString *str = @"3/15/2012 9:15 PM"; 
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 

formatter.dateFormat = @"MM/dd/yyyy HH:mm a"; 

NSDate *date = [formatter dateFromString:str]; 

NSLog(@"%@", date); 

Editar: Lo sentimos, el formato debe ser el siguiente:

formatter.dateFormat = @"MM/dd/yyyy hh:mm a"; 

Y el tiempo mostrado wil Seré la hora GMT. Entonces, si sumas/restas la zona horaria, serían las 9:15 PM.

Editar: # 2

uso de la siguiente manera. También obtendrías la hora exacta.

NSString *str = @"3/15/2012 9:15 PM"; 

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 

formatter.dateFormat = @"MM/dd/yyyy hh:mm a"; 

NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 

formatter.timeZone = gmt; 

NSDate *date = [formatter dateFromString:str]; 

NSLog(@"%@",date); 
+0

no es el mismo resultado: NSLog (@ "str") = 3/13/2012 2:00 PM NSLog (@ "date") = 2012-01-13 11:00:00 +0000 – samir

+0

Gracias, la fecha es la misma pero no la hora, lo siento – samir

+0

He actualizado mi respuesta. Pl. Mira esto. – Ilanchezhian

0

Hmmm - Usted ha ido mal durante un par de razones

  1. la NSDateFormatter es estricta y que no han sido.
  2. no proporcionó 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); 
+0

argh - no se puede obtener el formato ....... – Damo

+0

Gracias, pero todas mis cadenas son así @ "mm/dd/aaaa HH: mm PM/AM", es un servicio web que regresa para mí este – samir

+0

3 es cierto, a menos que esté usando ARC. –

0
NSString *str [email protected]"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]); 
+0

Gracias, está funcionando pero el problema es con el tiempo: – samir

+0

¿cuál es el problema? ¿Desea el tiempo –

+0

? Desea mostrar la hora también –

1

Su formateador está mal. De acuerdo con la documentación de NSDateFormatter, debe ser "MM/dd/aaaa h: mm a". También es probable que desea establecer la configuración regional como se indica en la Guía de formato de fecha:

Si está trabajando con las fechas de formato fijo, primero debe establecer la configuración regional del formateador fecha para algo apropiado para su fijo formato. En la mayoría de los casos, la mejor configuración regional para elegir es en_US_POSIX, una configuración regional que está diseñada específicamente para producir resultados en inglés de EE. UU. independientemente de las preferencias 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