たまに忘れるのでメモ、あんまり増えないかも
現在時刻の取得
NSDate *date = [NSDate date];
// 2014-02-17 14:17:01 +0000
注意
ここでいう現在時刻というのは、iOSの設定 > 一般 > 日付と時刻
で指定されたものになります
dateFormat
カスタムフォーマットを指定したい場合はNSDate.dataFormat
またはsetDateFormat:
を使う
NSDate *date = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
/* 12時間表記 */
dateFormatter.dateFormat = @"yyyy/MM/dd hh:mm:ss";
NSString *date12 = [dateFormatter stringFromDate:date];
// 2014/02/18 11:08:12
/* 24時間表記 */
dateFormatter.dateFormat = @"yyyy/MM/dd HH:mm:ss";
NSString *date24 = [dateFormatter stringFromDate:date];
// 2014/02/18 23:08:12
/* 0埋め表記 */
dateFormatter.dateFormat = @"yyyy/M/d h:m:s";
NSString *date0 = [dateFormatter stringFromDate:date];
// 2014/2/18 11:8:12
表記したいフォーマットパターンはData Formatting Guideに記されています
一部抜粋
OS X v10.9 and iOS 7 use version tr35-31.
OS X v10.8 and iOS 6 use version tr35-25.
日本語環境でのdateFormat
日本語の"日付と時刻"の設定で"24時間表示"というのがある
この設定がON/OFFの違いで24時間表示にした際の取得できる時刻が異なるので、注意が必要
NSDate *date = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
// 12時間表示
dateFormatter.dateFormat = @"yyyy/MM/dd hh:mm:ss";
NSString *date12 = [dateFormatter stringFromDate:date];
// 24時間表示
dateFormatter.dateFormat = @"yyyy/MM/dd HH:mm:ss";
NSString *date24 = [dateFormatter stringFromDate:date];
NSLog(@"%@", date12);
// 2014/02/18 11:08:12
NSLog(@"%@", date24);
// 2014/02/18 23:08:12
NSLog(@"%@", date12);
// 2014/02/18 11:08:12
NSLog(@"%@", date24);
// 2014/02/18 午後11:08:12
「午後」とか「午前」とか表示されてしまう
これはNSDateFormatter
のlocale.localeIdentifier
がja_JP
であるのが原因である
NSDateで「午前/午後」表示させない
NSDate *date = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"yyyy/MM/dd HH:mm:ss";
NSString *defaultLocale = [dateFormatter stringFromDate:date];
// dateFormatter.locale.localeIdentifier:ja_JP defaultLocale:2014/02/17 午後11:35:44
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
NSString *usLocale = [dateFormatter stringFromDate:date];
// dateFormatter.locale.localeIdentifier:en_US_POSIX usLocale:2014/02/17 23:35:44
データフォーマットのlocale
をen_US_POSIX
identifierで上書きしてあげるだけでOK
こういう処理はいちいち入れるのではなく、NSDate
クラスをカテゴライズした方が使いやすいかも
文字列(NSString)からNSDateに変換する
NSString *dateString = @"2014/02/17 23:15:46";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"yyyy/MM/dd HH:mm:ss";
NSDate *date = [dateFormatter dateFromString:dateString];
// 2014-02-17 14:15:46 +0000
注意
NSDate.dataFormat
またはsetDateFormat:
を指定しないで文字列変換すると@""
が返ってくる
日時を比較する
NSDate *date1 = [NSDate date];
NSDate *date2 = [NSDate date];
NSComparisonResult result = [date1 compare:date2];
switch(result) {
case NSOrderedSame:
// 同じ日時
break;
case NSOrderedAscending:
// date1 < date2
break;
case NSOrderedDescending:
// date1 > date2
break;
}
日時を時間や分で比較する
NSString *before = @"2014/02/17 22:15:46";
NSString *after = @"2014/02/17 23:17:49";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"yyyy/MM/dd HH:mm:ss";
NSDate *beforeDate = [dateFormatter dateFromString:before];
NSDate *afterDate = [dateFormatter dateFromString:after];
NSTimeInterval sec = [afterDate timeIntervalSinceDate:beforeDate];
// sec:3723
int hour = (int)(sec / 3600);
// hour:1
int min = (int)((sec - hour) / 60);
// min:62
timeIntervalSinceDate:
を使うことで、日時の比較をおこなう