2010-09-14 14 views
20

ich meine NSDateFormatter Initialisierung so:konvertieren NSDate zu NSString mit NSDateFormatter mit Time-Zone ohne GMT Zeit 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 ist jetzt:

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

Ich möchte die „loswerden + 00:00 "

Ich vermute von http://unicode.org/reports/tr35/tr35-6.html#Time_Zone_Fallback, dass ich ein Lokalisierungsproblem haben könnte. Ich arbeite gerade daran, indem ich die "+00: 00" manuell entferne, aber das ist nicht ideal.

EDIT

habe ich versucht, ein paar neue Möglichkeiten, um die NSTimeZone zu schaffen, aber sie beide produzieren die gleiche dateString:

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

+1 für die interessante Frage. Ich kann es selbst nicht herausfinden. BTW, möchten Sie vielleicht über einen möglichen Speicherverlust mit dem 'Z' Spezifizierer wissen: http://thegothicparty.com/dev/article/nsdateformatter-memory-leak/ –

+1

+1 für die Verwendung von "soly" –

Antwort

23

Entfernen Sie die 'z' Zeichen aus dem Format-String Hinter wenn Sie möchten die Zeitzone nicht anzeigen.

EDIT

Auf der anderen Seite, wenn Sie wollen einfach nur die Zeitzone Name angezeigt wird, stellen Sie einfach die ‚z‘ in Großbuchstaben. ((Edit: Verlassen Sie die 'z' Klein für benannte Zeitzone, dh PST und Groß 'Z' für -0800))

EDIT

Klein 'z' für alle anderen Zeitzonen funktioniert gut, aber Leider ist GMT ein Sonderfall. Am einfachsten ist es also, das "z" wegzulassen und "GMT" an das formatierte Datum anzuhängen.

+0

Das OP will Behalten Sie die Abkürzung der Zeitzone bei, aber entfernen Sie das Bit +00: 00. –

+0

Ah, dann benutze Großbuchstaben 'Z'. Ich werde meine Antwort aktualisieren. – jlehr

+0

Großbuchstabe 'Z' ergibt "+0000" gemäß RFC 822-Standards. Ich will nur "GMT" –

4

Akzeptierte Antwort hatte einen Tippfehler.

Auf der anderen Seite, wenn Sie wollen einfach nur die Zeitzone Name angezeigt wird, stellen Sie einfach die ‚z‘ in Großbuchstaben.

die 'z' Klein für benannte Zeitzone, dh PST und Groß 'Z'

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. Januar 2013 (Mittwoch) 00.33.46 PST für -0800

verlassen -0800