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 値で取得することが出来ると思います。
閏年の計算方法は、
- 年が 4 で割れなければ、その年は平年です。
- 年が 4 で割れた場合は、さらに 100 で割れるかどうかで異なります。
- 条件 2 で 100 で割れた場合は、さらに 400 で割れれば閏年となります。
- 条件 2 で 100 で割れても、400 で割れなければ平年となります。
以上のルールに従って判定することで、閏年を計算しています。
[ もどる ]