我正在使用Objective-C创建一堆代码来确定每个月的每个1月1月1日到2000年12月31日。我想得到这个输出:
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;
}
我哪里错了?
答案 0 :(得分:1)
使用相同的时区创建和显示日期。使用
NSLog(@"date: %@", [formatter stringFromDate:date]);
打印日期。
NSLog(@"date: %@", date);
使用您当地的时区,包括小时数。 NSDate以相对于GMT的秒数存储日期。
答案 1 :(得分: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;
}