&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];
}}

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS