1

このコード

NSDateComponents *component = [[NSDateComponents alloc] init];
NSCalendar       *gregorian = [[NSCalendar alloc]   initWithCalendarIdentifier:NSGregorianCalendar];
[component setMonth:1];
[component setYear:2013];
[component setDay:1];
currentMonth = [gregorian dateFromComponents:component];
NSLog(@"Date in MonthView %@ ",currentMonth);

私に次の日付を与える

Date in MonthView 2012-12-31 23:00:00 +0000

なんで?月の範囲は 0 から 11 になるはずですか?

4

2 に答える 2

0

実際、答えは使用しているカレンダーによって異なる場合があります (グレゴリオ暦を使用しているようですが、ユーザーは使用していない可能性があります)。

特定の日付コンポーネントの範囲を知る最も安全な方法は、カレンダーにクエリを実行することです。また、異なる場合があることにも注意してください (たとえば、グレゴリオ暦の最小範囲は 1 ~ 28 で、最大範囲は 1 ~ 31 です)

NSRange minimumMonthRange = [yourCalendar minimumRangeOfUnit:NSMonthCalendarUnit];

元の答え

「日付と時刻のプログラミングガイド」の例から:

[...] 年単位は 2004 年、月単位は 5 日、日単位は 6 です (グレゴリオ暦では 2004 年 5 月 6 日)。

蛾は 1 月、2 月、3 月、4 月、5 月、... と進み、5 月には 5 を使用するため、月の範囲は 1 から 12 です。

于 2013-09-10T13:13:48.797 に答える