&tag(Objective-C/日付と時刻); *目次 [#y0f4babe] #contents *参考情報 [#d92e67e8] -[[Objective-C]] -[[文字列からNSDate型に変換する: iPhoneアプリ開発備忘録:http://iphone-app-developer.seesaa.net/article/134688683.html]] -[[FirstResponder:NSDateをNSStringにしたい - livedoor Blog(ブログ):http://blog.livedoor.jp/firstresponder/archives/50089841.html]] -[[NSDateFormatter - 文字列と日付の変換 - 強火で進め:http://d.hatena.ne.jp/nakamura001/20100525/1274802305]] -[[iphone - NSDate dateFromString, how to parse 'around' UTC, GMT and User locale? - Stack Overflow:http://stackoverflow.com/questions/2534757/nsdate-datefromstring-how-to-parse-around-utc-gmt-and-user-locale]]…timezoneについて。 *NSDateを生成する [#r51cfa92] **現在の日付 [#db22e7a0] [NSDate date] **文字列から生成する [#le6b5693] -setDateFormatで使用する書式文字列の詳細は[[UTS #35: Unicode Locale Data Markup Language:http://www.unicode.org/reports/tr35/tr35-15.html#Date_Format_Patterns]]などを参照のこと。 -例1): "2009-12-05T20:26:00+09:00"のような文字列から生成。 #pre{{ NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setTimeStyle:NSDateFormatterFullStyle]; [formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZ"]; NSDate *date = [formatter dateFromString:@"2009-12-05T20:26:00+09:00"]; [formatter release]; }} -例2): "Mon Jan 28 02:31:55 +0000 2013"から生成。 #pre{{ NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease]; [formatter setTimeStyle:NSDateFormatterFullStyle]; [formatter setDateFormat:@"EEE MMM dd HH:mm:ss ZZZ yyyy"]; NSDate *date = [formatter dateFromString:str]; }} *NSDateを文字列に変換する [#t1115f69] **NSDateFormatterを使って書式指定 [#r99d5b68] #pre{{ NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease]; [formatter setDateFormat:@"YYYY/MM/dd HH:mm:ss"]; NSDate* date = [NSDate date]; NSString* dateStr = [formatter stringFromDate:date]; }} **NSDateFormatterでおおざっぱな形式を指定 [#t998f7bf] -[[How to make NSDateFormatter display locale-specific 2010-08-30 - Stack Overflow:http://stackoverflow.com/questions/1348590/how-to-make-nsdateformatter-display-locale-specific-date]] -setDateStyle / setTimeStyleを指定する。言語設定に応じた文字列が帰ってくるメリットがある。 *年月日を取得する [#u6532275] -[[iphone - How to get NSDate day, month and year in integer format? - Stack Overflow:http://stackoverflow.com/questions/6214094/how-to-get-nsdate-day-month-and-year-in-integer-format]] #pre{{ NSDate *currentDate = [NSDate date]; NSCalendar* calendar = [NSCalendar currentCalendar]; NSDateComponents* components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:currentDate]; // Get necessary date components [components month] //gives you month [components day] //gives you day [components year] // gives you year }} *日付の計算を行う [#a9ee54c9] **日付の差を取得する [#j18f7db5] -[[NSDate - 日付の計算、過去の日や末日を求める方法 - 強火で進め:http://d.hatena.ne.jp/nakamura001/20100609/1276101689]]より。dateB > dateAで計算しないと正の数が帰ってこないらしい。 #pre{{ NSDateFormatter *inputDateFormatter = [[NSDateFormatter alloc] init]; [inputDateFormatter setDateFormat:@"yyyy/MM/dd HH:mm:ss"]; NSDate *dateA = [inputDateFormatter dateFromString:@"2000/03/01 00:00:00"]; NSDate *dateB = [inputDateFormatter dateFromString:@"2000/03/03 00:00:00"]; // dateBとdateAの時間の間隔を取得(dateB - dateAなイメージ) NSTimeInterval since = [dateB timeIntervalSinceDate:dateA]; NSLog(@"%f秒", since); NSLog(@"%f分", since/60); NSLog(@"%f時", since/(60*60)); NSLog(@"%f日", since/(24*60*60)); [inputDateFormatter release]; }}