Почему мой NSDateFormatter возвращает nil при разборе? - PullRequest
1 голос
/ 08 марта 2010

мой код такой

NSString *tempDate = [NSString stringWithString:tempReviewData.pubDate];

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterLongStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
[dateFormatter setDateFormat:@"HH:mm a"];

NSDate *newDate = [dateFormatter dateFromString:tempReviewData.pubDate];

Моя новая дата становится нулевой, на данный момент я не знаю, почему

Ответы [ 3 ]

1 голос
/ 08 марта 2010
NSDate *newDate = [dateFormatter dateFromString:tempReviewData.pubDate];

Возвращает ли pubDate NSString или NSDate?

Если он возвращает строку, вам следует переименовать это свойство, чтобы четко указать это.

Если он возвращает дату (NSDate), то попытка разобрать ее как строку не будет работать, поскольку она не является строкой; более того, вы можете вырезать весь этот код форматера, так как у вас уже есть объект даты, за которым вы хотите.

1 голос
/ 08 марта 2010

Кажется, это работает для меня, но это зависит от формата tempReviewData.pubDate.

Когда я использую неверный формат, такой как @"6:30 M", я также получаю нулевое значение.

Это работает:

NSString *tempDate = [NSString stringWithString:@"6:30 PM"];

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterLongStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
[dateFormatter setDateFormat:@"HH:mm a"];

NSDate * newDate = [dateFormatter dateFromString:tempDate];
NSString * str = [dateFormatter stringFromDate:[NSDate date]];
NSLog(@"date: %@", newDate);
NSLog(@"str: %@", str);

Выход:

2010-03-08 22:36:57.904 x[4340:903] date: 1970-01-01 12:30:00 +1000
2010-03-08 22:36:57.905 x[4340:903] str: 22:36 PM
0 голосов
/ 11 июля 2010

Кажется, NSDateFormatter стал очень разборчивым.

-(void)dateFormatterTests {
    NSDateFormatter *formatter;

    formatter = [[NSDateFormatter alloc] init];

#ifdef WORKS
    [formatter setDateFormat:@"yyyy-MM-dd"];
#elif defined(ALSO_WORKS)
    [formatter setDateFormat:@"yyyy MM dd"];
    [formatter setLenient:YES];
#else // DOESN'T WORK
    [formatter setDateFormat:@"yyyy MM dd"];
#endif

    // Works per comments above
    NSLog(@"dFS: %@", [formatter dateFromString:@"2010-01-13"]);  
    // Never works with any of the above formats
    NSLog(@"dFS: %@", [formatter dateFromString:@"2010-01-13 22:00"]); 

    [formatter release]; formatter = nil;
}
...