2013-09-16 5 views
0

У меня есть NSDate *da, и когда я печатаю, я получаю следующую строку: 2013-10-24 00:00:00 +0000.дата форматирования выдача, возвращающая Nil все время

NSDateFormatter *form = [[NSDateFormatter alloc] init]; 
[form setDateFormat:@"yyyy-mm-dd"]; 
NSDate *myD = [form dateFromString: @"2013-10-24"]; 

Теперь то, что я хочу сделать, это сравнить NSDate *da и NSDate *myD. Если это соответствует, мне нужно напечатать NSLog.

if ([da isEqualToDate:myD]) {  
    NSLog(@"ok");    
} else { 
    NSLog(@"bad"); 
} 

Проблема заключается в том, что myD становится null. Как я могу это решить?

UPDATE

Еще есть проблема с форматером; Однако теперь он не возвращает NIL.

Когда я печатаю da, я получаю вывод 2013-10-24 13:00:00 +0000, а когда я печатаю myD, я получаю вывод 2013-10-23 18:30:00 +0000. Почему это не получило формат правильно. Я думаю, что по-прежнему существует некоторая ошибка в части форматирования моего кода. Помощь

UPDATE 2

NSDate *da = [NSDate date]; ///// PRINTS 2013-09-16 11:52:40 +0000 

    NSDateFormatter *form = [[NSDateFormatter alloc] init]; 
    [form setDateFormat:@"yyyy-MM-dd"]; 
    NSDate *myD = [form dateFromString: @"2013-09-16"]; ////// PRINTS 2013-09-16 00:00:00 +0000 
+0

http://stackoverflow.com/questions/11412852/compare-two-nsdates-in-iphone – n00bProgrammer

+0

Вставьте весь код, как вы создаете обе даты. –

+0

Возможный дубликат [NSDateFormatter dateFromString возвращает неверную дату] (http://stackoverflow.com/questions/11273001/nsdateformatter-datefromstring-returns-incorrect-date) –

ответ

0

Вы можете изменить свой dateformatter как

[form setDateFormat:@"yyyy-MM-dd"]; 

и Вы можете сравнить, как это ..

NSTimeInterval daInterval = [da timeIntervalSince1970]; 
NSTimeInterval myDInterval = [myD timeIntervalSince1970]; 

if(daInterval == myDInterval) 
    NSLog(@"dates are same.."); 
+1

Вопрос не в том, как сравнивать экземпляры NSDate, но 'NSDateFormatter' возвращает' nil' для формата даты. – Amar

+0

извините .. я видел это позже .. –

+0

Вы можете отредактировать свой ответ, чтобы улучшить его, и я удалю проголосовавший. – Amar

1

Ваша строка формата не так, как «мм» означает минуты, а не месяцы. Правильный формат будет

[form setDateFormat:@"yyyy-MM-dd"]; 
+0

В части форматирования моего кода, как правило, имеется некоторая ошибка. Можете ли вы, пожалуйста, посмотреть, я обновил сообщение. –

1

Месяц должен быть в верхнем регистре:

[form setDateFormat:@"yyyy-MM-dd"]; 

NSDateFormatter использует спецификации подробно here.

+0

У меня все еще проблема с форматированием. Я редактировал свой вопрос. Справка –

+0

@sharonHwk Это проблема с часовым поясом; найдите это, и вы должны решить свою проблему. – trojanfoe

0

Я думаю, что проблема у вас есть то, что вы не делаете это:

[form setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]]; 

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

+0

Я обновил свой вопрос, кажется, что в коде есть ошибка. –

+0

Пожалуйста, прочтите мой ответ - вам не нужно форматировать для сравнения дат - это действительно wrooong способ сделать это. –

+0

Я пробовал свой код, но его все тот же. Я думаю, что это сравнение времени, а также '13:00:00 + 0000' и' 18:30:00 + 0000'. поэтому как я должен избавиться от него. –

0
NSString *[email protected]"2013-10-24 00:00:00 +0000"; 
    NSDateFormatter *form = [[NSDateFormatter alloc] init]; 
    [form setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"]; 
    NSDate *date1= [form dateFromString:str1]; 
    NSLog(@"%@",date1); 


    NSString *[email protected]"2013-10-24 00:00:00 +0000"; 
    NSDate *date2= [form dateFromString:str2]; 

    if ([date1 isEqualToDate:date2]) { 
     NSLog(@"Same"); 
    } 
    else 
    { 
     NSLog(@"Not Same"); 
    } 

я надеюсь, что это полезно ..

Смежные вопросы