Преобразование экс. 2010-09-11T00: 00: 00 + 01: 00 в формате NSDate - PullRequest
9 голосов
/ 15 ноября 2010

Я потратил слишком много времени (более часа) на то, что, как мне кажется, было бы двухминутным заданием. На iPhone:

NSString * dateString = @"2010-09-11T00:00:00+01:00";
NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"YYYY-MM-dd'T'HH:mm:ssTZD"];
NSDate  *date = [formatter dateFromString:dateString];

РЕЗУЛЬТАТ: дата == ноль

Чего мне не хватает !! (Помимо моего срока)

С уважением,

Ken

Ответы [ 3 ]

12 голосов
/ 15 ноября 2010

TZD не является определенным форматером для спецификации Юникода . Документ, на который вы ссылались в другом месте, был предложением, сделанным кем-то в W3C, только для обсуждения. Стандарт Unicode, за которым следует Apple, является законченным стандартом другого тела.

Ближе всего к тому, что вам нужно, будет ZZZ (т. Е. @ "YYYY-MM-dd'T'HH: mm: ssZZZ"), но в нем нет двоеточия. Поэтому вам нужно использовать строку:

2010-09-11T00:00:00+0100

Вместо того, который у вас есть, заканчивающийся на +01: 00.

например. следующее:

NSString * dateString = @"2010-09-11T00:00:00+0100";
NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"YYYY-MM-dd'T'HH:mm:ssZZZ"];
NSDate  *date = [formatter dateFromString:dateString];
NSLog(@"%@", date);

Регистрирует действительный объект даты, 2010-09-10 23:00:00 GMT.

2 голосов
/ 15 ноября 2010

Совет: попробуйте использовать ваш форматтер для преобразования из объекта NSDate в строку, а затем посмотрите, что вы получите. В этом направлении отладку часто проще, чем в другом.

Вы читали это?

http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns

То, что TZD в конце вашей строки формата выглядит немного хитроумно.

0 голосов
/ 15 сентября 2011

Я решил эту проблему, используя этот код.

...