【发布时间】:2013-02-03 20:01:03
【问题描述】:
我正在使用 Objective-C 创建一堆代码来确定从 1901 年 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;
}
我哪里错了?
【问题讨论】:
-
对于初学者使用日期格式化程序输出日期:
NSLog(@"date: %@", [formatter stringFromDate:date]); -
这如何解决问题?
-
这不是一个解决方案。 OTOH,该代码对我有用。也许您的时区问题导致日期错误,请检查小时。日期的简单 NSLog 使用您的本地时区。
-
它现在也适用于我。你说的格式化程序改变了一切(我真的很想知道如何)。这与时区无关,我没有使用小时数。
-
为什么要指定
NSWeekdayCalendarUnit?我想你的意思是使用NSDayCalendarUnit。
标签: objective-c date nsdate nsdatecomponents date-formatting