【问题标题】:Display list of month in that particular year in XCode 5在 XCode 5 中显示该特定年份的月份列表
【发布时间】:2014-02-11 07:12:35
【问题描述】:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"yyyy";
NSDate *date = [dateFormatter dateFromString:@"2011"];
for(int month=0;month<=12;month++)
   {
dateFormatter.dateFormat=@"MMMM";
NSString * monthString = [[dateFormatter stringFromDate:date] capitalizedString];
NSLog(@"month: %@", monthString);
    }

我需要显示特定年份中的所有月份。例如,如果我将年份指定为 2011 年,我希望该年的整个 12 个月都使用上面的代码。

但答案是,我得到了 1 月的一个月,打印了 12 次,但我需要在特定年份获得整个 12 个月。

【问题讨论】:

  • 使用 NSDateComponents。您正在循环使用“月”(12 次),但未在循环中使用此变量。你不会得到 12 次相同的东西,这很正常。
  • 是否有年份缺少特定月份?根据我的经验(只有 30 年),每年都有 12 个月。 ;-)
  • 您每次都记录相同的日期。使用日期组件构建每个日期。
  • 更严肃的一点是:使用NSArray *months = [dateFormatter monthSymbols]; 可能会更快地得到你想要的东西

标签: objective-c nsdate nsdateformatter nscalendar


【解决方案1】:

试试下面的代码。

      //NSInteger startingMonth = 1;
    NSInteger startingYear = 2014;

    // we'll need this in several places
    NSCalendar *cal = [NSCalendar currentCalendar];

    // build the first date (in the starting month and year)
    NSDateComponents *comps = [[NSDateComponents alloc] init];
    //[comps setMonth:startingMonth];
    [comps setYear:startingYear];
    // [comps setDay:1];
    NSDate *date = [cal dateFromComponents:comps];

    // this is our output format
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"MMMM YYYY"];
    NSDateFormatter *format1 = [[NSDateFormatter alloc] init];
    [format1 setDateFormat:@"MM yy"];
    // we need NSDateComponents for the difference, i.e. at each step we
    // want to go one month further
    NSDateComponents *comps2 = [[NSDateComponents alloc] init];
    [comps2 setMonth:1];

    for (int i= 0; i < 12; i++) {
        NSLog(@"month list %@", [format1 stringFromDate:date]);
        NSString *str=[NSString stringWithFormat:@"%@",[formatter stringFromDate:date]];
        [mothlist_ary addObject:str];
        NSLog(@"GET MONTH %@",mothlist_ary);
        // add 1 month to date
        date = [cal dateByAddingComponents:comps2 toDate:date options:0];

    }

【讨论】:

    【解决方案2】:

    试试这个...

        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        dateFormatter.dateFormat = @"yyyy";
        NSDate *date = [dateFormatter dateFromString:@"2011"];
    
        NSCalendar *cal = [NSCalendar currentCalendar];
        NSDateComponents *components = [cal components:( NSMonthCalendarUnit) fromDate:date];
    
    
        dateFormatter.dateFormat=@"MMMM";
    
        for(int month=1;month<=12;month++)
        {
            [components setMonth:(month)];
            NSDate *lastMonth = [cal dateFromComponents:components];
    
            NSString * monthString = [[dateFormatter stringFromDate:lastMonth] capitalizedString];
            NSLog(@"month: %@", monthString);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-03
      • 2012-02-14
      • 2021-05-24
      • 2016-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多