西暦が欲しい場合はNSGregorianCalendarを使う
iPhoneアプリ開発の中で、年月日の値を取るために次のようなコードを書いていた。
1NSDate *date = [NSDate date];
2NSCalendar *calendar = [NSCalendar currentCalendar];
3NSDateComponents *components = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:date];
4int year = components.year;
5int month = components.month;
6int day = components.day;
yearには西暦の値(例えば2012)が入ることを前提としてアプリを作っていたが、iOSのカレンダーの設定によっては和暦(24)やタイ仏暦(2555)の値が入ることになり、アプリケーションがクラッシュするバグを出してしまった。
iOSの設定に依らずに西暦の値が欲しい場合は、システムのカレンダーではなくNSGregorianCalendarを使う必要があった。
1NSDate *date = [NSDate date];
2NSCalendar *calendar = [[NSCalendaralloc] initWithCalendarIdentifier:NSGregorianCalendar];
3NSDateComponents *components = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:date];
4int year = components.year;
5int month = components.month;
6int day = components.day;
逆に和暦が欲しければNSJapaneseCalendarを使えば良い。