LoginSignup
2
2

More than 5 years have passed since last update.

Cocoaで日付を扱う

Last updated at Posted at 2013-07-16

NSDate型から文字列や数値に変換する。

NSDate *now = [NSDate new];

// NSDateFormatterを使ってNSDate型を文字列に変換
NSDateFormatter *formatter = [NSDateFormatter new];
formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
formatter.dateFormat = @"yyyy/MM/dd HH:mm:ss";
NSString *formattedString1 = [formatter stringFromDate:now];

// NSCalendarとNSDateComponentsを使ってNSDate型を整数に変換
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSUInteger flags = NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute;
NSDateComponents *components = [gregorian components:flags fromDate:now];
NSString *formattedString2 = [NSString stringWithFormat:@"%02d月%02d日 %02d時%02d分", (int)components.month, (int)components.day, (int)components.hour, (int)components.minute];

NSDateFormatterdateFormatプロパティにフォーマット文字列を指定する場合は、ロケールに@"en_US_POSIX"を指定した方が良いです。
ロケールを指定しない場合、端末設定で24時間表記をOFFにしている場合は「午前」「午後」といった文字列が付加されてしまうため、意図した通りフォーマットされません。@"en_US_POSIX"はフォーマット通りの文字列を得ることができる特別なロケールです。
NSDateFormatterの使い方は、こちらにまとめられています。

文字列や数値からNSDate型に変換する。

NSDate *date = nil;

// NSDateFormatterを使ってNSString型からNSDate型に変換
NSDateFormatter *formatter = [NSDateFormatter new];
formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
formatter.dateFormat = @"yyyy/MM/dd HH:mm:ss";
date = [formatter dateFromString:@"2013/01/02 11:12:13"];

// NSCalendarとNSDateComponentsを使って整数からNSDate型に変換
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents *components = [NSDateComponents new];
components.year = 2013;
components.month = 1;
components.day = 2;
components.hour = 11;
components.minute = 12;
components.second = 13;
date = [gregorian dateFromComponents:components];
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2