2012-06-16 21 views
20

Tengo el siguiente código.NSDateFormatter en el modo de 12 horas

NSDateFormatter *df = ...; 
[df setTimeZone:[NSTimeZone defaultTimeZone]]; 
[df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"]; 
NSDate * date = [df dateFromString:date_string]; //here is the problem 

En el modo de 24 horas todo está bien. Cuando el modo de 12 horas está configurado en el dispositivo, stringFromDate devuelve null. El formato de date_string es el mismo todo el tiempo, formato de fecha también. ¿Por que sucede?

+0

u puede mostrar el valor date_string! – Dinesh

+0

2012-06-16T10: 00: 47.436 + 0000 por ejemplo – Sergey

+0

Ver [esta publicación] (http://stackoverflow.com/q/6613110/581994). –

Respuesta

30

intenta establecer la configuración regional de esta manera:

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

Para forzar lugar a las 24 horas, que puede utilizar:

NSLocale *twentyFour = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"]; 
+0

Me gustaría obligar a dateformatter a ignorar el modo de 12 horas y usar las 24 horas todo el tiempo. ¿Qué identificador de loc debo usar? – Sergey

+0

es_GB -> NSLocale * formatterLocale = [[[NSLocale alloc] initWithLocaleIdentifier: @ "en_GB"] liberación automática]; – aleroot

+0

Brillante! Funciona de maravilla. – Fogmeister

49

En sus NSDateFormatter "yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"HH stands para las 24 horas y hh representa 12 horas

+0

Quiero ignorar las configuraciones del sistema de 12 horas y no sé cómo – Sergey

+5

@Sergey luego usar ** hh ** en lugar de ** HH ** –

+1

Si configuro hh, cuando reciba 14:55 no funcionará – Sergey

6

modo de 12 horas a 24 horas modo:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"hh:mm a"]; 
NSDate *amPmDate = [formatter dateFromString:amPmHourString]; 
[formatter setDateFormat:@"HH:mm"]; 
NSString *24HourString = [formatter stringFromDate:amPmDate]]; 

Para el modo de modo de 24 horas a 12 horas acaba de hacer lo contrario

4
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
NSLocale *locale = [[[NSLocale alloc] 
       initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]; 
[dateFormat setLocale:locale]; 
Cuestiones relacionadas