【iOS】[NSCalendar currentCalendar]を使うときの注意

公開: 2013-11-11 23:19
更新: 2016-04-29 06:03
最近ちょっと運動不足気味だったので、散歩してきました。
夜風が気持ちよかったです。毎日続けたいもんですのう。

さてさて、NSCalendarってな便利なものがあるんです。
その名の通り、カレンダーですね。よくあるネット上の情報だと

NSCalendar *calendar = [NSCalendar currentCalendar];
これ使えって書いてあるんですけど、少々危険なにおいがするのです。
こちらに今日の日付を20xx/xx/xxの形で表示をするコードがあります。

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:[NSDate date]];
NSString *dateString = [NSString stringWithFormat:@"%d/%d/%d", [components year], [components month], [components day]];
NSLog(@"%@", dateString);
まぁ期待値はこんな感じでしょう
2013/11/11

ところがこうなることがあります。

25/11/11

2013年が25年になってます。
iPhoneの設定でカレンダーを和暦にするとこうなります。
カウントダウン系のアプリなんかはこれでバグることが多いですね。
[NSCalendar currentCalendar]の罠?
対処方法はcurrentCalendarを使わずこちらを使えばOK。

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
参考になれば幸いです。
ではでは♪

この記事をシェア
この記事にコメントする
書き込む
あっきぃ(@appstars_aki)
Web、iOSなフリーランサーです。好きなものはお寿司です。でもお寿司は高いので普段は雑草とか拾ったドングリを食べています。お仕事や意味もなく毎月お小遣いをくれる人を探してます。

お仕事の依頼や自分で作ったアプリのレビューを希望しちゃう方はaki@appstars.jpまでご連絡ください。