NSDateオブジェクトから、UNIXタイムスタンプを取得する。NSTimeIntervalはdoubleとして定義されているみたい。
NSTimeInterval timestamp = [[NSDate date] timeIntervalSince1970];
NSLog(@"%f", timestamp);
実行結果:
1293247007.415029
NSDateオブジェクトから日付と時刻を表す文字列を取得する。
NSDate *date = [NSDate date];
NSString *desc = [date descriptionWithLocale:[NSLocale currentLocale]];
NSLog(@"%@", desc);
実行結果:
2010年12月25日土曜日11時58分51秒 日本標準時
フォーマットを指定したい場合は、NSDateFormatterクラスを使います。
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"Y/M/d H:m:s"];
NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];
NSLog(@"Date: %@", dateString);
実行結果:
Date: 2010/12/25 11:55:36
逆に、文字列からNSDateオブジェクトを取得する。日付を表す文字列が、NSDateFormatterに設定されたdateFormatに一致していないとダメみたい。
日付のフォーマットは、ICUのDate/Time Formatに従って記述します。
NSString *dateStr = @"2010/12/25 12:00:00";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"Y/M/d H:m:s"];
NSDate *date = [dateFormatter dateFromString:dateStr];
NSLog(@"%@", [date descriptionWithLocale:[NSLocale currentLocale]]);
実行結果:
2010年12月25日土曜日12時00分00秒 日本標準時
NSDateオブジェクトから、今日の日付や月、年を取得する。
NSDate *current = [NSDate date];
NSCalendar *cal = [NSCalendar currentCalendar];
NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *comps = [cal components:unitFlags fromDate:current];
int year = [comps year];
int month = [comps month];
int day = [comps day];
NSLog(@"Year: %d, Month: %d, Day: %d", year, month, day);
実行結果:
Year: 2010, Month: 12, Day: 25
今日の始まりと終わりのNSDateオブジェクトを取得する。
NSDate *current = [NSDate date];
NSCalendar *cal = [NSCalendar currentCalendar];
NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *comps = [cal components:unitFlags fromDate:current];
NSDate *beginningOfToday = [cal dateFromComponents:comps];
[comps setHour:23];
[comps setMinute:59];
NSDate *endOfToday = [cal dateFromComponents:comps];
NSLog(@"\ncurrent: %@, \nbeginningOfToday: %@, \nendOfToday: %@",
[current descriptionWithLocale:[NSLocale currentLocale]],
[beginningOfToday descriptionWithLocale:[NSLocale currentLocale]],
[endOfToday descriptionWithLocale:[NSLocale currentLocale]]);
実行結果:
current: 2010年12月25日土曜日11時31分36秒 日本標準時, beginningOfToday: 2010年12月25日土曜日0時00分00秒 日本標準時, endOfToday: 2010年12月25日土曜日23時59分00秒 日本標準時
ローカライズされた月の表記を表示する
// NSCalendarから月を表す数字を取得する。
NSCalendar *cal = [NSCalendar currentCalendar];
NSUInteger unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *comps = [cal components:unitFlags fromDate:[NSDate dateWithTimeIntervalSince1970:pointTime]];
int month = [comps month];
// NSCalendarからだけでは表記は取得できないみたいなので、NSDateFormatterを使う
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
// 欲しい表記の長さに応じて使い分けられる
NSArray *monthSymbols1 = [dateFormatter monthSymbols];
NSArray *monthSymbols2 = [dateFormatter shortMonthSymbols];
NSArray *monthSymbols3 = [dateFormatter standaloneMonthSymbols];
NSArray *monthSymbols4 = [dateFormatter veryShortMonthSymbols];
NSArray *monthSymbols5 = [dateFormatter veryShortStandaloneMonthSymbols];
NSLog(@"monthSymbols: %@", [monthSymbols1 objectAtIndex:month - 1]);
NSLog(@"shortMonthSymbols: %@", [monthSymbols2 objectAtIndex:month - 1]);
NSLog(@"standaloneMonthSymbols: %@", [monthSymbols3 objectAtIndex:month - 1]);
NSLog(@"veryShortMonthSymbols: %@", [monthSymbols4 objectAtIndex:month - 1]);
NSLog(@"veryShortStandaloneMonthSymbols: %@", [monthSymbols5 objectAtIndex:month - 1]);
iOSの設定で、言語環境の書式を「日本」にしたときの実行結果:
monthSymbols: 12月 shortMonthSymbols: 12月 standaloneMonthSymbols: 12月 veryShortMonthSymbols: 12 veryShortStandaloneMonthSymbols: 12
iOSの設定で、言語環境の書式を「英語(アメリカ合衆国)」にしたときの実行結果:
monthSymbols: December shortMonthSymbols: Dec standaloneMonthSymbols: December veryShortMonthSymbols: D veryShortStandaloneMonthSymbols: D
iOSの設定で、言語環境の書式を「中国語(中国)」にしたときの実行結果:
monthSymbols: 12月 shortMonthSymbols: 12月 standaloneMonthSymbols: 十二月 veryShortMonthSymbols: 12月 veryShortStandaloneMonthSymbols: 12月
月の他に、曜日の表記はweekdaySymbols、四半期の表記はquarterSymbolsで取得できる。
他にも使うことがあったら、ちょっとずつ追記していきます。





