0

私のアプリでは、次の 1 年間の月名と年を取得し、配列に格納する必要があります。今日が 2012 年 9 月だとすると、2013 年 8 月までの月名と年が必要です。

月と年を取得する方法を教えてください。事前にサンクス

4

2 に答える 2

4

現在のカレンダーのコンポーネント パラメーターに NSMonthCalendarUnit を使用して、現在の月の数を取得します。たとえば、9 月の場合は 9、次に 2012 などの現在の年を表す 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++;
}
于 2012-09-17T16:40:33.953 に答える
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];
于 2012-09-17T16:06:50.363 に答える