[NSLocale currentLocale]
で自動的に他言語対応のNSDateFormatterサンプル
NSString *format = [NSDateFormatter dateFormatFromTemplate:@"EdMMM" options:0 locale:[NSLocale currentLocale]];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:format];
[dateFormatter stringFromDate:[NSDate date]];
// en_US => Thu, Jun 6
// ja_JP => 6月6日(木)
和暦時に yyyy
の値がおかしい
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSString *result = [dateFormatter stringFromDate:stubDate];
// 期待 : 2013-06-06
// 現実 : 0025-06-06
HH
の値がiOSの設定の影響を受ける
components:fromDate:toDate:options:
e.g) minuteの差分を得る
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *dateComponents = [calendar
components:NSMinuteCalendarUnit fromDate:fromDate toDate:toDate options:0];
[dateComponents minute];
// toDate - fromDate の 分 を取得できる
currentCalendar
is slowNSDateFormatter
のインスタンス化も遅めNSCalendar Class Reference EZ-NET: NSDate から年月や日時を取り出す - Objective-C プログラミング
rangeOfUnit:inUnit:forDate:
e.g) targetDate
の月初めを取得
NSCalendar *cal = [NSCalendar currentCalendar];
// inUnit:で指定した単位(月)の中で、rangeOfUnit:で指定した単位(日)が取り得る範囲
NSRange range = [cal rangeOfUnit:NSDayCalendarUnit inUnit:NSMonthCalendarUnit forDate:targetDate];
NSInteger firstDayValue = range.location;
e.g.) 和暦の表示のUIDatePicker
UIDatePicker *datePicker = [[UIDatePicker alloc] init];
// 言語は日本語(iOSの設定の書式に該当)
datePicker.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"ja_JP"];
// カレンダーは西暦(iOSの設定のカレンダーに該当)
NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
gregorian.locale = [NSLocale currentLocale];
datePicker.calendar = gregorian;
datePicker.datePickerMode = UIDatePickerModeDateAndTime;
NSDate
にするNSDateFormatter
に 頼りすぎるなNSDateComponents
が一番NSCalendar
は1種類じゃないNSDateComponents
は直接扱うには冗長すぎるNSCalendar
や NSDateFormatter
は安易に使うとパフォーマンスの問題を起こしやすいNSDate
を中心に考える(ユーザーが直接扱うのはNSDate)NSDateComponents
を考える必要を少なくするContributing や issue 待ってます(日本語で大丈夫です)
参考