2013-07-25 2 views
1

Я хочу объединить 2 NSDates через NSDateComponents и [NSString stringWithFormat] в [dtFormatter dateFromString]. первый имеет полный формат, состоящий из yyyy-MM-dd HH:mm:ss. Но у второго есть только информация о часах и минутах. Поэтому я хочу, чтобы вторая дата имела всю другую информацию с первой даты, кроме секунд (будет добавлена ​​автоматически?). Я думаю, что все работает хорошо, пока dtFormatter не форматирует строку до даты. Я уже искал на StackOverflow, но ни одно решение не может исправить мой вопрос:NSDateFormatter dateFromString возвращает null

мой код:

//pDate has a complete date format 
NSDateComponents *dateComponentsComplete = [[NSCalendar currentCalendar] 
components:NSYearCalendarUnit |NSDayCalendarUnit | NSMonthCalendarUnit fromDate:self.pDate]; 
//sunRise has the incomplete format 
NSDateComponents *dateComponentsIncompleteSunRise = [[NSCalendar currentCalendar] components:NSHourCalendarUnit | NSMinuteCalendarUnit fromDate:self.sunRise]; 

NSInteger day = [dateComponentsComplete day]; 
NSInteger month = [dateComponentsComplete month]; 
NSInteger year = [dateComponentsComplete year]; 

NSInteger hour = [dateComponentsIncompleteSunRise hour]; 
NSInteger minute = [dateComponentsIncompleteSunRise minute]; 

//concatenate 
NSString *strSunRise = [NSString stringWithFormat:@"%d-%d-%d %d:%d", year, month, day, hour, minute]; 

NSLog(@"strSunRise %@ ", strSunRise); 

NSDateFormatter* dtFormatter = [[NSDateFormatter alloc] init]; 
[dtFormatter setFormatterBehavior:NSDateFormatterBehavior10_4]; 
[dtFormatter setTimeZone:[NSTimeZone systemTimeZone]]; 
[dtFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 

NSDate* dateOutput = [dtFormatter dateFromString:strSunRise]; 
NSLog(@"%@", [dateOutput class]); 
NSLog(@"dateOutput %@ ", [dtFormatter stringFromDate:dateOutput]); 

выход:

strSunRise 2013-7-25 5:16 
(null) 
dateOutput (null) 
+2

Действительно, люди! Нужно ли задавать этот вопрос СНОВА ??? –

ответ

2

Вашей входная строка не соответствует формату:

format: @"yyyy-MM-dd HH:mm:ss" 
input: @"2013-7-25 5:16" 
         ^^^ missing :00 

Вы можете исправить это с помощью небольшого кода моды:

NSString *strSunRise = [NSString stringWithFormat:@"%d-%d-%d %d:%d:00", year, month, day, hour, minute]; 
                    ^^^ 

(или удалением :ss из строки формата).

+0

Я думал, что уже пробовал это и не работал. теперь он запускает LOL! Спасибо, в любом случае!!! :) – user2618343

0

Ваша строка кода:

NSString *strSunRise = [NSString stringWithFormat:@"%d-%d-%d %d:%d", year, month, day, hour, minute]; 

должен также включать секунды, потому что вы используете форматирование даты с секундами:

[dtFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 
Смежные вопросы