Возникли проблемы с форматированием даты для строковой даты 2011-11-25T21: 17: 49-05: 00 - PullRequest
1 голос
/ 26 ноября 2011

Я пробовал несколько вариантов форматов даты, предложенных в других темах, но я не могу получить строку даты «2011-11-25T21: 17: 49-05: 00» для правильного преобразования, я всегда заканчиваюс нулевым NSDate:

stringDate = @"2011-11-25T21:17:49-05:00";
NSLog(@"The String: %@", stringDate);
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZ"];
NSDate *theDate = [formatter dateFromString:stringDate];
NSLog(@"The Date: %@", theDate);

Создает следующий вывод:

2011-11-26 00:01:35.592 Octain3[21779:11603] The String: 2011-11-25T21:17:49-05:00
2011-11-26 00:01:43.298 Octain3[21779:11603] The Date: (null)

Я могу получить его, чтобы дать мне NSDate, если я потеряю «-05: 00», но дажетогда я, кажется, получаю неправильный часовой пояс:

stringDate = @"2011-11-25T21:17:49";
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];
theDate = [formatter dateFromString:stringDate];
NSLog(@"The Date: %@", theDate);

Вывод:

2011-11-26 00:01:50.554 Octain3[21779:11603] The Date: 2011-11-26 02:17:49 +0000

Ответы [ 3 ]

2 голосов
/ 26 ноября 2011

NSDateFormatter не может обработать поле смещения часового пояса с : в нем.Вы должны удалить это (манипулируя строкой) перед обработкой даты.Если вы не включите поле часового пояса, тогда дата будет считываться в текущем часовом поясе, если только вы не установите часовой пояс NSDateFormatter.

И помните, что вы всегда должны устанавливать «безопасный» локальный при интерпретации строки фиксированного формата, иначе ваше приложение может быть испорчено настройкой локали телефона.

0 голосов
/ 26 ноября 2011

Интересно, что другие ответы согласны.Я решил, что вы не можете контролировать формат строки, поэтому я нашел альтернативу, которая разделяет часовой пояс и анализирует его отдельно.Но самое главное это предполагает, что вы не можете изменить формат получаемой строки.

NSString *stringDate = @"2011-11-25T21:17:49-05:00";

NSString *timeZoneString = [stringDate substringFromIndex:19];
NSString *dateString = [stringDate substringToIndex:19];
int zoneOffset = (60 * 60 * timeZoneString.intValue);

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:zoneOffset];
formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss";
NSDate *theDate = [formatter dateFromString:dateString];
0 голосов
/ 26 ноября 2011

После моего комментария я просто изменил этот код в своем небольшом тестовом проекте.

Код, подобный следующему:

NSString * stringDate = @"2011-11-25T21:17:49 -0500";
NSLog(@"The String: %@", stringDate);

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss ZZZ"];
NSDate *theDate = [formatter dateFromString:stringDate];
NSLog(@"The Date: %@", theDate);
[formatter release];

Создает это:

2011-11-26 00:37:27.082 TestingiPhone[43505:f803] The String: 2011-11-25T21:17:49 -0500
2011-11-26 00:37:41.006 TestingiPhone[43505:f803] The Date: 2011-11-26 02:17:49 +0000

Я думаю, вам просто нужно настроить пару входов, и все будет в порядке!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...