ios4 - разбиение даты и времени из строки на две отдельные строки - PullRequest
0 голосов
/ 16 января 2012

У меня в приложении есть фид JSON, одно из полей - это комбинированная строка даты и времени, которую мне нужно разбить на отдельные строки даты и времени для отображения в ячейке таблицы.Пример ввода из JSON:

2012-01-18 14:18:00.

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

Я пробовал что-то вроде этого, чтобы получить только время:

NSDictionary *rowData = [self.raceData objectAtIndex:[indexPath row]];     

NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init] autorelease];
[dateFormat setDateFormat:@"h:mma"];

NSDate *raceDate = [dateFormat dateFromString:[rowData valueForKey:@"race_time"]];        
NSString *raceTime = [dateFormat stringFromDate:raceDate];

, но на выходе raceTime просто нулевое.

Любая помощь приветствуется.

Ответы [ 3 ]

0 голосов
/ 17 января 2012

Да, у меня это работает - возможно, это немного грязно, но вот что я сделал:

NSDictionary *rowData = [self.raceData objectAtIndex:[indexPath row]];     

NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init] autorelease];
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

NSDate* raceDate = nil;
NSError* dateError = nil;
NSRange dateRange = NSMakeRange(0, [[rowData valueForKey:@"race_time"] length]);

[dateFormat getObjectValue:&raceDate forString:[rowData valueForKey:@"race_time"] range:&dateRange error:&dateError];

[dateFormat setDateFormat:@"HH.mm"];
NSString *raceTime = [dateFormat stringFromDate:raceDate];

Теперь я могу выводить raceTime как отдельное время. Мне пришлось использовать getObjectValue: forString: range: error: для анализа исходной строки до даты перед изменением форматирования и повторным ее анализом.

Поскольку я использую это в таблице, я подозреваю, что мне нужно будет использовать статический форматировщик, чтобы он не замедлял все - если кто-то может дать наилучшую практику в этом, я был бы признателен.

0 голосов
/ 17 января 2012

Если вы уверены, что формат входной строки не изменится - вы можете использовать что-то похожее на:

NSString *date = nil;
NSString *time = nil;

NSDictionary *rowData = [self.raceData objectAtIndex:[indexPath row]];
NSString *raceTime = [rowData valueForKey:@"race_time"];
NSArray *dateParts = [raceTime componentsSeparatedByString:@" "];
if ([dateParts count] == 2) {
    date = [dateParts objectAtIndex:0];
    time = [dateParts objectAtIndex:1];
}
0 голосов
/ 16 января 2012

возможно, формат должен быть больше похож на

[dateFormatter setDateFormat:@"yyyy-MM-dd 'at' HH:mm"];

, посмотрите на http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html

, возможно, все прояснится abit

...