获取iPhone的月份和年份提前1年

时间:2012-09-17 15:57:21

标签: iphone ios nsdate nsdateformatter nsdatecomponents

在我的应用程序中,我需要获得下一年的月份名称和年份并存储在数组中。我的意思是假设今天的2012年9月,我需要月份名称和年份,直到2013年8月。

请告诉我如何获得月份和年份? Thanx提前

2 个答案:

答案 0 :(得分:4)

将NSMonthCalendarUnit用于当前日历的components参数以获取当前月份的编号,例如9月为9月,然后为当年的NSYearCalendarUnit,例如然后在for循环中使用这些,它使用模数运算来回绕下一年。

如果for循环中的月份数小于当前月份,则使用当前年份加1作为下一年,否则使用当前年份。

请注意,使用NSMonthCalendarUnit时返回的月份数字从1开始,而monthSymbols的索引号从零开始。这意味着即使我们从9开始9月,我们从这个阵列得到的月份是10月,这是我们想要的下一个月。

/*
 next 12 months after current month
 */

NSDateFormatter  *dateFormatter   = [[NSDateFormatter alloc] init];
NSDate           *today           = [NSDate date];
NSCalendar       *currentCalendar = [NSCalendar currentCalendar];

NSDateComponents *monthComponents = [currentCalendar components:NSMonthCalendarUnit fromDate:today];
int currentMonth = [monthComponents month];

NSDateComponents *yearComponents  = [currentCalendar components:NSYearCalendarUnit  fromDate:today];
int currentYear  = [yearComponents year];
int nextYear     = currentYear + 1;

int months  = 1;
int year;
for(int m = currentMonth; months < 12; m++){

    int nextMonth = m % 12;

    if(nextMonth < currentMonth){
        year = nextYear;
    } else {
        year = currentYear;
    }

    NSLog(@"%@ %i",[[dateFormatter monthSymbols] objectAtIndex: nextMonth],year);

    months++;
}

答案 1 :(得分:1)

NSDateFormatter是任何类型的日期(NSDate)格式化等的关键

int monthNumber = 09;   //September
NSDateFormatter *df = [[[NSDateFormatter alloc] init] autorelease];
NSString *monthName = [[df monthSymbols] objectAtIndex:(monthNumber-1)];

打印日期,如2012年9月17日

NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateStyle:NSDateFormatterLongStyle]; 
[df setTimeStyle:NSDateFormatterNoStyle];  
NSString *dateString = [df stringFromDate:[NSDate date]]; 
[df release];