2013-02-03 37 views
1

我使用Objective-C創建了一堆代碼,以確定從1/1/1901到31/12/2000每個月的每個月的第1個月。我希望得到如下的輸出:生成20世紀的第1個月 - Objective-C

1/1/1901 
1/2/1901 
1/3/1901 
. 
. 
. 
1/11/2000 
1/12/2000 

但我發現了每個月的最後一天:

31/1/1901 
28/2/1901 
. 
. 
. 
30/11/2000 
31/12/2000 

這裏是我的代碼:

int main(int argc, const char * argv[]) 
{ 

@autoreleasepool { 

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setDateFormat:@"dd/MM/yyyy"]; 
    NSDate *date = [[NSDate alloc] init]; 
    date = [formatter dateFromString:@"01/01/1901"]; 
    NSDate *stopDate = [[NSDate alloc] init]; 
    stopDate = [formatter dateFromString:@"31/12/2000"]; 

    NSCalendar *cal = [NSCalendar currentCalendar]; 

    while ([[date earlierDate:stopDate] isEqualToDate:date]){ 
     NSDateComponents *comps = [cal components:NSWeekdayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit fromDate:date]; 

     if ([comps month] == 12){ 
      [comps setMonth:1]; 
      [comps setYear:[comps year]+1]; 
     }else{ 
      [comps setMonth:[comps month]+1]; 
     } 

     date = [cal dateFromComponents:comps]; 
     NSLog(@"%@",date); 
    } 

} 

return 0; 
} 

我在哪裏錯了?

+1

氣味像功課。 – Mundi

+0

對於初學者用日期格式化程序輸出日期:'NSLog(@「date:%@」,[formatter stringFromDate:date]);' – zaph

+0

這是如何解決問題的? – moray95

回答

1

創建並顯示具有相同時區的日期。使用

NSLog(@"date: %@", [formatter stringFromDate:date]); 

打印的日期。

NSLog(@"date: %@", date); 

使用您當地的時區,包括小時。 NSDate以秒爲單位存儲相對於GMT的日期。

0

這裏的另一種方法:

int main(int argc, const char * argv[]) { 
    @autoreleasepool { 

     NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
     [formatter setDateStyle: NSDateFormatterShortStyle]; 

     NSCalendar *cal = [NSCalendar currentCalendar]; 

     NSDateComponents *comps = [[NSDateComponents alloc] init]; 
     [comps setDay:1]; 

     for (int year = 1901; year <= 2000; year++) { 
      [comps setYear:year]; 
      for (int month = 1; month <= 12; month++) { 
       [comps setMonth:month]; 

       NSDate *date = [cal dateFromComponents:comps]; 
       NSLog(@"%@", [formatter stringFromDate:date]); 
      } 
     } 
    } 

    return 0; 
}