Получить месяц и год на 1 год вперед в iPhone

в моем приложении мне нужно получить название месяца и год на следующий 1 год и сохранить в массиве. Я имею в виду, предположим, что сегодня сентябрь 2012 года, мне нужно название месяца и год до августа 2013 года.

Не могли бы вы сказать мне, как я могу получить месяц и год? Спасибо заранее


person iCoder4777    schedule 17.09.2012    source источник
comment
Вы не очень ясно говорите. Вам нужен месяц/год на каждый день или каждую неделю или что?   -  person AJMansfield    schedule 17.09.2012


Ответы (2)


Используйте NSMonthCalendarUnit для параметра компонентов текущего календаря, чтобы получить номер текущего месяца, например. 9 для сентября, а затем NSYearCalendarUnit для текущего года, например. 2012. Затем используйте их в цикле for, который использует модульную арифметику для переноса на следующий год.

Если номер месяца в цикле for меньше текущего месяца, используйте текущий год плюс 1 в качестве следующего года, иначе используйте текущий год.

Обратите внимание, что номера месяцев, возвращаемые при использовании NSMonthCalendarUnit, начинаются с 1, тогда как номера индексов для monthSymbols начинаются с нуля. Это означает, что хотя мы начинаем с 9 для сентября, месяц, который мы получаем из этого массива, — это октябрь, который является следующим месяцем, который нам нужен.

/*
 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++;
}
person SPA    schedule 17.09.2012
comment
Это не выбор текущего месяца, как это включить. - person iPhone 7; 09.07.2013
comment
правильно - см. комментарий "следующие 12 месяцев после текущего месяца" - person SPA; 22.07.2013

NSDateFormatter - это ключ для любого типа форматирования даты (NSDate) и т. д.

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

Чтобы напечатать дату, например, 17 сентября 2012 г.

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