我正在制作一个用于练习目的的日历,我试图找到特定年份特定月份的天数。
我成功地找到了正确的价值,直到今天,突然间,我才在2月才得到正确的天数。它之前的工作正常,我没有对我的代码做任何改动。
我的代码:
-(NSDate *)startOfMonth:(NSInteger)calendarMonth :(NSInteger)calendarYear
{
NSDate *date=[NSDate date];
NSCalendar * calendar = [NSCalendar currentCalendar];
NSDateComponents * comps = [calendar components: NSCalendarUnitYear | NSCalendarUnitMonth |NSCalendarUnitDay fromDate:date];
[comps setMonth:calendarMonth];
[comps setYear:calendarYear];
NSDate * monthOnlyDate = [calendar dateFromComponents:comps];
NSDateComponents * currentDateComponents = [calendar components: NSCalendarUnitYear | NSCalendarUnitMonth fromDate:monthOnlyDate ];
self.numberOfDays = [[NSCalendar currentCalendar] rangeOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitMonth forDate:monthOnlyDate].length ;
NSLog(@"NUMBER OF DAYS==%li",(long)self.numberOfDays);
NSDate * startOfAnyMonth = [calendar dateFromComponents: currentDateComponents];
NSDateFormatter *weekDay = [[NSDateFormatter alloc] init];
[weekDay setDateFormat:@"EEE"];
NSString * currentDay =[NSString stringWithFormat:@"%@",[weekDay stringFromDate:startOfAnyMonth]];
[self updateFirstDateOFCurrentMonth:currentDay];
return startOfAnyMonth;
}
答案 0 :(得分:0)
我猜测它几天前工作的原因并且今天2月没有工作的原因是2月没有第30天(今天是这样),而你#&# 39;根据当天重新创建日期对象,然后更改月份,而不检查日期。
但更重要的是,你的逻辑对我来说并不是很清楚 - 如果你想要的是获得指定月份的第一天,为什么不只是根据组件创建NSDate对象由用户指定,同时提供1作为日期组件的值?你在这里做的是创建一个基于今天的日期,更改组件,然后检查它们以获得您手动设置的值(因此已经知道)。
此外,如果这是出于练习目的,正如您所提到的,我强烈建议为方法声明的一部分提供所有参数的名称,否则调用它将不太可读。在这种情况下,我会考虑将方法名称更改为:
- (NSDate *)startOfMonth:(NSInteger)calendarMonth ofYear:(NSInteger)calendarYear
我希望这会有所帮助。祝你好运。