Неправильное время от NSDateFormatter - PullRequest
1 голос
/ 29 марта 2011

У меня есть строка, с которой я хочу разобрать время:

NSString *longdate = @"Mar 27, 2011 8:38:38 PM";

Я хочу проанализировать эту дату и вывести только часть времени с часами + минуты + час / час:

// First, convert our string into an NSDate
NSDateFormatter *inFormat = [[NSDateFormatter alloc] init];
[inFormat setDateFormat:@"MMM dd, yyyy HH:mm:ss aaa"];
NSDate *date = [inFormat dateFromString:longdate];
[inFormat release];

// Now convert from date back to a string
NSDateFormatter *outFormat = [[NSDateFormatter alloc] init];
[outFormat setDateFormat:@"HH:mm aaa"];
NSString *final = [outFormat stringFromDate:date];
[outFormat release];

NSLog(@"original: %@ | final %@", longdate, final);

Проблема в том, что последнее время неверно.Я ожидаю, что время будет 8:38 вечера, но вместо этого я получаю 12:38 вечера.

Я просто хочу получить тот же час, что и я, и не беспокоиться о каких-либо часовых поясах или локалях,Что я здесь не так делаю?Спасибо.

Ответы [ 4 ]

6 голосов
/ 29 марта 2011

Нашел проблему.Не имеет ничего общего с часовыми поясами и имеет отношение к использованию неправильных кодов форматирования для форматера даты.

[inFormat setDateFormat:@"MMM dd, yyyy HH:mm:ss aaa"];

должно быть:

[inFormat setDateFormat:@"MMM dd, yyyy h:mm:ss aaa"];

Аналогично, формат даты outFormat должен быть:

[outFormat setDateFormat:@"h:mm aaa"];

После этой настройки все работает нормально, даже без каких-либо настроек TimeZone.

1 голос
/ 29 марта 2011

Как сказал Дэйв, проверь свои часовые пояса.Вы также можете указать форматеру даты использовать ваш текущий часовой пояс:

[outFormat setTimeZone:[NSTimeZone localTimeZone]];
0 голосов
/ 29 апреля 2013
NSString *longdate = @"2013-04-29 10:20 PM";

// First, convert our string into an NSDate
NSDateFormatter *inFormat = [[NSDateFormatter alloc] init];
[inFormat setTimeZone:[NSTimeZone localTimeZone]];
[inFormat setDateFormat:@"yyyy-MM-dd hh:mm aa"];
NSDate *date = [inFormat dateFromString:longdate];

// Now convert from date back to a string
NSDateFormatter *outTimeFormat = [[NSDateFormatter alloc] init];
[outTimeFormat setDateFormat:@"hh:mm aaa"];
NSString *finalTime = [outTimeFormat stringFromDate:date];


NSDateFormatter *outDateFormat = [[NSDateFormatter alloc] init];
[outDateFormat setDateFormat:@"yyyy-MM-dd"];
NSString *finalDate = [outDateFormat stringFromDate:date];

NSLog(@"Date:%@ and Time :%@",finalDate,finalTime);
0 голосов
/ 29 марта 2011

Вы перепутали свои часовые пояса. IIRC, NSDateFormatter (по умолчанию) будет анализировать материал в часовом поясе UTC (+000), но даты NSLog установлены в вашем текущем часовом поясе. Или что-то в этом роде.

В любом случае, проверьте ваши часовые пояса.

...