2012-07-23 13 views
45

Estoy trabajando en una aplicación de iPhone con el uso de NSDateFormatter. Estoy recibiendo el tiempo del servicio web como "00:00:00", "16:00:00","15:30:00" and so on. Necesito convertir estos tiempos a si el tiempo es "00:00:00" to "12 AM", si es el momento "16:00:00" to "4 PM", si el tiempo es "15:30:00" a "3.30 PM". He usado el siguiente código para esto, pero cuando tengo el pase "16:00:00" the date returns null.Cómo obtener la hora en formato am/pm iphone NSDateFormatter?

NSString *dats1 = @"16:00:00"; 
NSDateFormatter *dateFormatter3 = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter3 setDateStyle:NSDateFormatterMediumStyle]; 
[dateFormatter3 setDateFormat:@"hh:mm:ss"]; 
NSDate *date1 = [dateFormatter3 dateFromString:dats1]; 
NSLog(@"date1 : %@", date1); **// Here returning (null)** 

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"hh:mm a"]; 
NSLog(@"Current Date: %@", [formatter stringFromDate:date1]); **// Here also returning (null)** 
[formatter release]; 

Cuando estoy pasando "00:00:00" está regresando "12 AM" correctamente. ¿Puede alguien ayudarme a resolver este problema? Gracias por adelantado.

+1

Gracias a todos los que publican su respuesta y me ayudan. Todos ustedes han recibido una respuesta correcta y me han ayudado a resolver este problema. Gracias de nuevo. – Gopinath

+2

Di voto vivo a todas sus respuestas correctas. Muchas gracias por su mano amiga. – Gopinath

+1

Realmente deberías haberte tomado un tiempo para leer la documentación de 'NSDateFormatter' y podrías haber respondido esto por ti mismo. –

Respuesta

104

Si el formato de hora está en 24hrs por favor utilice "HH:mm:ss" formato. Por favor, prueba el código y avísame si funciona para ti. He probado y se está volviendo "4 PM"

NSString *dats1 = @"16:00:00"; 
NSDateFormatter *dateFormatter3 = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter3 setDateStyle:NSDateFormatterMediumStyle]; 
[dateFormatter3 setDateFormat:@"HH:mm:ss"]; 
NSDate *date1 = [dateFormatter3 dateFromString:dats1]; 
NSLog(@"date1 : %@", date1); **// Here returning (null)** 

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"hh:mm a"]; 
NSLog(@"Current Date: %@", [formatter stringFromDate:date1]); **// Here also returning (null)** 
[formatter release]; 

Gracias.

+0

12:12 am aquí, pero esto regresó a las 12:12 pm ..Hmmm –

+0

devuelve 16:00 en ios9 –

+0

@PatelJigar agregue esto [setFormatter setLocale: [[NSLocale alloc] initWithLocaleIdentifier: @ "en_US_POSIX"]]; –

16

¿Por qué otra vez está asignando el NSDateFormatter?

sólo tiene que dar formato a NSDate y luego otra vez a NSString,

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
    [dateFormatter setDateFormat:@"HH:mm:ss"]; 

    NSDate *date = [dateFormatter dateFromString:dats1]; 

    [dateFormatter setDateFormat:@"hh:mm a"]; 

    NSString *formattedDate = [dateFormatter stringFromDate:date]; 

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

Buen código ... +1, pero creo que primero 'dateFormatter setDateFormat: @" HH: mm: ss "];' no es necesario. – Dilip

+6

Es necesario porque tiene el formato de horas de entrada en formato HH, es decir formato de 24 horas – Charan

14

Trate HH:mm:ss (nótese las capitales en el formato de hora)

+4

upvoted para el H vs h. –

7

espero que alguien sería de gran ayuda que les gustaría conseguirlo en Swift

Para Swift

let dateFormatter = NSDateFormatter() 
//if some one want 12AM,5PM then use "hh mm a" 
//if some one want 00AM,17PM then use "HH mm a" 
dateFormatter.dateFormat = "hh mm a" 
let stringDate = dateFormatter.stringFromDate(NSDate()) 
println(stringDate) 
+0

no funciona mi amigo –

6

Este código continuación mantenga siempre en formato 12 horas:

NSLocale *12hourFomrat = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; 
df.locale = 12hourFomrat; 

Esto siempre tener en formato de 24 horas

NSLocale *24hourFormat = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"]; 
df.locale = 24hourFormat 
11

Puede utilizar el .ShortStyle que se adaptará a la localización actual:

let timeFormatter = NSDateFormatter() 
timeFormatter.dateStyle = .NoStyle 
timeFormatter.timeStyle = .ShortStyle 
timeFormatter.stringFromDate(NSDate()) 

Devuelve 17:12 o 5:12 PM dependiendo de la configuración regional actual del dispositivo.

Cuestiones relacionadas