2016-01-15 4 views
0

У меня есть проблемы с NSDate конверсии NSString, я следующий код в методеNSDate преобразование в NSString не следует NSDateFormatter

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"]; 
[formatter setTimeZone:timeZone]; 
[formatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'zzz'"]; 
return [formatter stringFromDate:date]; 

Если I'm не ошибаюсь, это должно возвращать строку как

"2016-01-15T22:45:40.GMT" 

Но результирующая строка зависит от конфигурации устройства, то есть если устройство показывает дату как 24 часа, то я получаю результат выше, с другой стороны, если устройство настроено на отображение дома как AM ВЕЧЕРА. тогда я получаю

"2016-01-15T10:46:50 p.m..GMT" 
+4

Вы, вероятно, нужно установить локаль: см [этот вопрос] (HTTP : //stackoverflow.com/q/6613110/3985749). – pbasdf

+0

Выше ответ хороший, потому что вы можете использовать его проще. Но если вы не хотите создавать категорию, вы можете установить языковой стандарт форматирования, как этот formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier: @ "en_US_POSIX"]; – thanyaj

+0

FYI - вам не нужно избегать всех знаков препинания. Ваш формат может быть 'yyyy-MM-dd'T'HH: mm: ss.zzz'. Обратите внимание, что вам нужно избегать 'T'. – rmaddy

ответ

1

From the documentation:

Хотя в принципе строка формата определяет фиксированный формат, по умолчанию NSDateFormatter по-прежнему занимает предпочтения пользователя (в том числе настройки локали) во внимание. Вы должны учитывать следующие моменты при использовании строк форматирования:

В iOS пользователь может переопределить настройку по умолчанию AM/PM по умолчанию в течение 24 часов. Это может привести к тому, что NSDateFormatter перепишет указанную строку формата.

Я думаю, вы должны рассмотреть, используя собственный метод форматирования, если вы хотите, чтобы результат иметь фиксированный формат, независимо от настроек пользователя.

На самом деле, from this answer (как указал pbasdf), кажется, что вы можете обойти это, просто установив локаль:

NSLocale* en_US_POSIX = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; 
[formatter setLocale:en_US_POSIX]; 
Смежные вопросы