2013-05-05 5 views
0

Я сделал небольшую программу для расчета разницы между двумя датами и вывел количество дней и месяцев. Программа показывает количество месяцев и количество дней штрафа отдельно. Однако, когда я присоединяюсь к ним вместе во флагом, вывод показывает только правильное количество месяцев, а «12» - количество дней, независимо от того, какую дату я вставляю. Я также попробовал inline components: (NSDayCalendarUnit|NSMonthCalendarUnit), но та же проблема. Вот мой код. Большое спасибо за любую помощь!NSDate не показывал точные дни

#import <Foundation/Foundation.h> 

int main(int argc, const char * argv[]) 
{ 
@autoreleasepool { 
     NSDate *startDate=[NSDate dateWithString:@"2004-2-24 1:54:10 +0600"]; 
     NSDate *today=[NSDate date]; 
     NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]; 
     NSUInteger flags = NSMonthCalendarUnit | NSDayCalendarUnit; 
     NSDateComponents *components = [gregorian components: flags fromDate:startDate toDate:today options:0]; 
     NSInteger days = [components day]; 
     NSInteger months = [components month]; 
     NSLog(@"%li",(long)days); 
     NSLog(@"%li",(long)months); 
    } 
    return 0; 
} 

Выход:

2013-05-05 14:49:36.943 calenderCalc[4111:303] 12 
2013-05-05 14:49:36.944 calenderCalc[4111:303] 110 

ответ

1

Выход только показывает "12" для количества дней, независимо от того, какую дату я ставлю в

Вы уверены.? Когда я использую startDate@"2013-4-30 1:54:10 +0600", я вижу days is 6 и months равен 0. Ваш код выглядит хорошо.

Редактировать

Вот как сравнить 2 даты день месяца ", независимо от того, или нет, вы их в том же месяце или году.

NSCalendar* gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar] ; 
NSDate* startDate = [NSDate dateWithString:@"2013-4-18 1:54:10 +0600"] ; 
NSDate* today  = [NSDate dateWithString:@"2013-5-05 1:54:10 +0600"] ; 
NSDateComponents* startDateComponents = [gregorian components:NSDayCalendarUnit fromDate:startDate] ; 
NSDateComponents* todayComponents  = [gregorian components:NSDayCalendarUnit fromDate:today] ; 
int daysApart = fabs(startDateComponents.day - todayComponents.day) ; 
+0

Хм, я просто попробовал эту дату на моем, и я действительно получил 6 и 0. Однако я пробовал другие даты, такие как 1997-2-24, 2001-1-13, и просто случайные даты это, и я получаю неправильные цифры, такие как 12, 21 и т. д. – Carpetfizz

+0

О, я думаю, что нашел свою ошибку, это дает мне только число «дней» с этой даты. Что, если я хотел бы включить дни месяца? Должен ли я вручную сделать это, или есть более простой способ? Я имею в виду: с 1/1/12 до 1/1/13, есть 365 дней, но разница составляет 0 (это то, что я получаю). – Carpetfizz

+0

Все зависит от того, какие флажки CalendarUnit вы указываете. Если вы укажете '(NSMonthCalendarUnit | NSDayCalendarUnit)', то полученные NSDateComponents будут указывать, сколько месяцев + сколько дней находится между двумя датами. Ваш оригинальный пример показывает, что если вы добавите 110 месяцев, то добавьте 12 дней до 24 февраля 2004 года, вы получите сегодняшнюю дату. Это тот ответ, который вы ищете, не так ли? –

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