Преобразование NSDate в NSString с NSDateFormatter с TimeZone без модификатора времени GMT - PullRequest
20 голосов
/ 14 сентября 2010

Я инициализирую свой NSDateFormatter таким образом:

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 сейчас:

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

Я хочу избавиться от "+00: 00"

Я предполагаю из http://unicode.org/reports/tr35/tr35-6.html#Time_Zone_Fallback, что у меня может быть проблема с локализацией. Сейчас я работаю над этим, удалив вручную «+00: 00», но это не идеально.

EDIT

Я попробовал несколько новых способов создания NSTimeZone, но оба они производят один и тот же dateString:

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

Ответы [ 2 ]

23 голосов
/ 14 сентября 2010

Удалите завершающий символ «z» из строки формата, если вы не хотите отображать часовой пояс.

EDIT

С другой стороны, если вы просто хотите отобразить название часового пояса, просто наберите 'z' в верхнем регистре. ((редактировать: оставить строчную букву «z» для именованного часового пояса, то есть PST и прописную букву «Z» для -0800))

EDIT

Строчные буквы 'z' отлично работают для всех остальных часовых поясов, но, к сожалению, GMT - особый случай. Так что самое простое, что нужно сделать, это просто опустить «z» и добавить «GMT» к форматированной дате.

4 голосов
/ 24 января 2013

Принятый ответ имел опечатку.

С другой стороны, если вы просто хотите отобразить название часового пояса, просто наберите 'z' в верхнем регистре.

оставьте строчную букву «z» для именованного часового пояса, то есть PST и прописную букву «Z», для -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 января 2013 г. (среда) 12:33:46 PST-0800

...