2010-09-14 10 views
20

estoy inicializar mi NSDateFormatter así:Convertir NSDate a NSString con NSDateFormatter con zona horaria sin modificador Hora GMT

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]]; 
[dateFormatter setDateFormat:@"EEE, d MMM yyyy HH:mm:ss z"]; 
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 
NSDate *date = [NSDate date]; 
NSString *dateString = [dateFormatter stringFromDate:date]; 

dateString es ahora:

Thu, 29 Jul 2010 14:58:42 GMT+00:00 

que quieren deshacerse de la "+ 00:00 "

Supongo que de http://unicode.org/reports/tr35/tr35-6.html#Time_Zone_Fallback tengo un problema de localización. Estoy trabajando en esto ahora mismo al eliminar el "+00: 00" manualmente, pero eso no es lo ideal.

EDITAR

he intentado un par de nuevas maneras de crear la NSTimeZone, pero ambos producen el mismo dateString:

[NSTimeZone timeZoneWithName:@"GMT"]; 
[NSTimeZone timeZoneWithName:@"UTC"]; 
[NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 
[NSTimeZone timeZoneWithAbbreviation:@"UTC"]; 
+1

+1 para la pregunta interesante. No puedo resolverlo yo mismo. Por cierto, es posible que desee saber acerca de una posible pérdida de memoria con el especificador 'z': http://thegothicparty.com/dev/article/nsdateformatter-memory-leak/ –

+1

+1 para usar "thusly" –

Respuesta

23

quitar el carácter terminador 'z' de la cadena de formato si no quiere mostrar la zona horaria

EDITAR

Por otro lado, si lo que desea es visualizar el nombre de zona horaria, simplemente hacer que la mayúscula 'z'. ((Edit: dejar la minúscula 'z' para la zona horaria llamada, es decir, en mayúsculas 'Z' para -0800) PST y)

EDITAR

Minúsculas 'z' funciona bien para todas las otras zonas horarias, pero Desafortunadamente GMT es un caso especial. Entonces lo más fácil es omitir la 'z' y anexar "GMT" a la fecha formateada.

+0

El OP quiere mantenga la abreviatura de zona horaria, pero deshágase del bit de +00: 00. –

+0

Ah, luego usa mayúscula 'Z'. Actualizaré mi respuesta. – jlehr

+0

La letra mayúscula 'Z' arroja "+0000" según los estándares RFC 822. Solo quiero "GMT" –

4

La respuesta aceptada tiene un error tipográfico.

Por otro lado, si lo que desea es visualizar el nombre de zona horaria, simplemente hacer que la mayúscula 'z'.

deje la minúscula 'z' para la zona horaria llamada, es decir, en mayúsculas 'Z' para -0800

NSDateFormatter *format = [[NSDateFormatter alloc] init]; 
    [format setDateFormat:@"MMMM dd, yyyy (EEEE) HH:mm:ss z Z"]; 
    NSDate *now = [NSDate date]; 
    NSString *nsstr = [format stringFromDate:now]; 

// 23 de enero de, 2013 PST y (miércoles) 12:33:46 PST -0800

Cuestiones relacionadas