NSDate から閏年かを判定する : Objective-C プログラミング - 日付のデータを取り扱う

PROGRAM


NSDate から閏年かを判定する

Objective-C では、NSDate クラスを用いて日付を扱いますが、そこから年を取得して、それがグレゴリオ暦でいう閏年かどうかを判定してみます。

そのためには、まず NSCalendar と NSDateComponents クラスを利用して、NSDate から年情報を取り出します。そして、その年数を元にして、次のように閏年かどうかを計算して行く感じになります。

// 日付オブジェクトが保持する年が閏年であるかを判定します。

- (BOOL)isLeapYear:(NSDate*)argDate

{

BOOL result;

 

NSCalendar* calendar;

NSDateComponents* components;

 

calendar = [NSCalendar currentCalendar];

 

// 日付から年情報を取得します。

components = [calendar components:NSYearCalendarUnit];

 

// 取得した年が閏年かどうかを判定します。

if (components.year % 4 == 0)

{

if (components.year % 100 == 0)

{

result = (components.year % 400 == 0);

}

else

{

result = YES;

}

}

else

{

result = NO;

}

 

return result;

}

これで、指定した日付が閏年かどうかを BOOL 値で取得することが出来ると思います。

閏年の計算方法は、

  1. 年が 4 で割れなければ、その年は平年です。
  2. 年が 4 で割れた場合は、さらに 100 で割れるかどうかで異なります。
  3. 条件 2 で 100 で割れた場合は、さらに 400 で割れれば閏年となります。
  4. 条件 2 で 100 で割れても、400 で割れなければ平年となります。

以上のルールに従って判定することで、閏年を計算しています。

[ もどる ]