2010-09-14 21 views
20

Je suis mon NSDateFormatter initialisation ainsi:Convertir NSDate à NSString avec NSDateFormatter avec TimeZone sans GMT Heure Modificateur

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 est maintenant:

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

Je veux se débarrasser de la « + 00:00 "

Je devine de http://unicode.org/reports/tr35/tr35-6.html#Time_Zone_Fallback que je pourrais avoir un problème de localisation. Je travaille autour de cela en supprimant le "+00: 00" manuellement, mais ce n'est pas idéal.

EDIT

J'ai essayé quelques nouvelles façons de créer le NSTimeZone, mais ils ont tous deux produisent la même dateString:

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

+1 pour la question intéressante. Je ne peux pas le comprendre moi-même. BTW, vous voudrez peut-être savoir à propos d'une fuite de mémoire possible en utilisant le spécificateur «z»: http://thegothicparty.com/dev/article/nsdateformatter-memory-leak/ –

+1

+1 pour l'utilisation de "donc" –

Répondre

23

Retirez le queue caractère « z » de la chaîne de format si vous ne voulez pas afficher le fuseau horaire.

EDIT

D'autre part, si vous voulez juste afficher le nom du fuseau horaire, juste faire la majuscule « z ». ((Edit: quitter le 'z' minuscule pour fuseau horaire nommé, soit PST et majuscules 'Z' pour -0800))

EDIT

Minuscules 'z' fonctionne très bien pour tous les autres fuseaux horaires, mais Malheureusement GMT est un cas particulier. Donc la chose la plus simple à faire est d'omettre le 'z' et d'ajouter "GMT" à la date formatée.

+0

L'OP veut conserver l'abréviation du fuseau horaire, mais se débarrasser du bit +00: 00. –

+0

Ah, alors utilisez 'Z' majuscule. Je vais mettre à jour ma réponse. – jlehr

+0

Les majuscules «Z» donnent «+0000» selon les normes RFC 822. Je veux juste "GMT" –

4

La réponse acceptée a eu une faute de frappe.

D'autre part, si vous voulez juste afficher le nom du fuseau horaire, juste faire la majuscule « z ».

quitter la 'z' minuscule pour fuseau horaire nommé, à savoir PST et 'Z' majuscule pour -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 Janvier, 2013 (mercredi) 12:33:46 PST -0800