iPhoneアプリで「2012/12/31」と入力してるのに、「2013/12/31」になっちゃうんですけど!!
という問い合わせを受けて、調べました。
ソースコードは、こんな感じ。
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@”YYYY/MM/dd”];
NSDate *inputDate = [formatter dateFromString:[textBox text]];
NSString *dateStr = [formatter stringFromDate:inputDate];

NSDate型に変換するところは問題ないのに、NSString型に変換するときに、1年後の日付になっているようです。
NSDateFormatterに指定する書式文字列に関しては資料が少ないのですが、このページ書式文字列の表へのリンクがありました。
YYYYは下記のように書かれていて、カレンダーの年と違った値になることがあると書かれています。
It’s because the format string YYYY represent the “Year (of “Week of Year”), used in ISO year-week calendar. May differ from calendar year.”
YYYY ではなく yyyy を使えということです。
どのような日付が影響を受けるのか、2012年から2014年までの3年分を調べてみました。
yyyy/MM/dd YYYY/MM/dd
2012/12/30 2013/12/30
2012/12/31 2013/12/31
2013/12/29 2014/12/29
2013/12/30 2014/12/30
2013/12/31 2014/12/31
2014/12/28 2015/12/28
2014/12/29 2015/12/29
2014/12/30 2015/12/30
2014/12/31 2015/12/31

おもに年末の数日間が影響を受けるようです。
YYYY/MM/dd でもほとんどの場合は問題なく動作するので気がつきにくいのですが、みなさんも注意した方が良いと思います。


0件のコメント

コメントを残す

アバタープレースホルダー

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください