2010-09-14 7 views
20

sto inizializzazione mia NSDateFormatter così:Convertire NSDate a NSString con NSDateFormatter con TimeZone senza GMT Tempo Modifier

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 è ora:

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

voglio sbarazzarsi del "+ 00:00"

sto indovinando da http://unicode.org/reports/tr35/tr35-6.html#Time_Zone_Fallback che io possa avere un problema di localizzazione. Ci sto lavorando proprio ora rimuovendo manualmente "+00: 00", ma non è l'ideale.

EDIT

Ho provato un paio di nuovi modi per creare il NSTimeZone, ma entrambi producono lo stesso dateString:

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

+1 per la domanda interessante. Non riesco a capirlo da solo. A proposito, si potrebbe desiderare di sapere di una possibile perdita di memoria utilizzando la 'z' identificatore: http://thegothicparty.com/dev/article/nsdateformatter-memory-leak/ –

+1

+1 per l'utilizzo di "questa convenzione" –

risposta

23

rimuovere il carattere coda 'z' dalla stringa di formato se non vuoi visualizzare il fuso orario.

EDIT

D'altra parte, se si desidera solo per visualizzare il nome fuso orario, basta fare la maiuscola 'z'. ((Edit: lasciare la minuscola 'z' per fuso orario di nome, vale a dire PST e maiuscolo 'Z' per -0800))

EDIT

Minuscole 'z' funziona bene per tutti gli altri fusi orari, ma sfortunatamente il GMT è un caso speciale. Quindi la cosa più facile da fare è semplicemente omettere la 'z' e aggiungere "GMT" alla data formattata.

+0

Il PO vuole mantenere l'abbreviazione del fuso orario, ma eliminare il bit +00: 00. –

+0

Ah, quindi utilizzare la 'Z' maiuscola. Aggiornerò la mia risposta – jlehr

+0

La "Z" maiuscola restituisce "+0000" per gli standard RFC 822. Voglio solo "GMT" –

4

La risposta accettata ha avuto un errore di battitura.

D'altra parte, se si desidera solo per visualizzare il nome fuso orario, basta fare la maiuscola 'z'.

lasciare la minuscola 'z' per fuso orario di nome, vale a dire PST e maiuscolo 'Z' per -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 gen 2013 (Mercoledì) 12:33:46 CET -0800

Problemi correlati