ラベル 日付時刻関連 の投稿を表示しています。 すべての投稿を表示
ラベル 日付時刻関連 の投稿を表示しています。 すべての投稿を表示

2013年9月16日月曜日

タイマーの生成

タイマー処理を行うには、NSTimerクラスを使用する。

[クラスメソッド]
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats

seconds: タイマーを起動する秒数
aSelector: セレクタ(タイマー起動するメソッド)
userInfo: タイマーに付加するデータ
repeats: YES:繰り返す, NO:1回限り

// タイマーの生成
NSTimer *timer_ = [NSTimer scheduledTimerWithTimeInterval:60.0
                                                   target:self
                                                 selector:@selector(timerCallback:)
                                                 userInfo:nil
                                                  repeats:YES];

// タイマー起動するメソッド
- (void)timerCallback:(NSTimer*)timer
{
    // タイマーの実処理を実装する
}

viewWillDisappearなどでタイマーをストップ(破棄)するには、invalidateメソッドをコールする。

// タイマーストップ
[timer_ invalidate];

2013年8月29日木曜日

NSDateに日数を加算する

NSDateに日数を加算したNSDateを生成する。

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [[NSDateComponents alloc] init];
NSDate *today = [NSDate date];

// 1日マイナス
components.day = -1;
NSDate *yesterday = [calendar dateByAddingComponents:components toDate:today options:0];
// 1日プラス
components.day = 1;
NSDate *tommorow = [calendar dateByAddingComponents:components toDate:today options:0];

// ログ出力
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy.MM.dd HH:mm:ss";
NSLog(@"today:%@ yesterday:%@ tommorow:%@",
      [formatter stringFromDate:today],
      [formatter stringFromDate:yesterday],
      [formatter stringFromDate:tommorow]);

2013年8月28日水曜日

NSDateから時刻0時のNSDateを作成する

// 時刻0時のNSDateを作成
NSDate *today = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components
= [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit
              fromDate:today];
NSDate *date = [calendar dateFromComponents:components];

// ログ出力
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy.MM.dd HH:mm:ss";
NSLog(@"today:%@ date:%@", [formatter stringFromDate:today], [formatter stringFromDate:date]);

2013年8月27日火曜日

NSDateの比較

NSDate *date を別のNSDateと比較する。

// 同じ日時かどうか比較
NSDate *today = [NSDate date];
if ([date isEqualToDate:today]) {
    NSLog(@"date == today");
}
else {
    NSLog(@"date != today");
}

// どちらが先か後か比較
NSDate *today = [NSDate date];
if ([date compare:today] == NSOrderedDescending) {
    NSLog(@"date > today");
}
else if ([date compare:today] == NSOrderedAscending) {
    NSLog(@"date < today");
}
else if ([date compare:today] == NSOrderedSame) {
    NSLog(@"date == today");
}

2013年8月21日水曜日

年の差を求める

2つのNSDate間の年の差を求める。例えば誕生日から現在までの年数を求めるような場合、うるう年を考慮する必要があるので、NSCalendar、NSDateComponentsを使用すると便利。

// NSDate *birthDate から現在までの年の差を求める(年齢を求める)
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *diffComponents
= [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit
              fromDate:birthDate
                toDate:[NSDate date]
               options:0];
NSInteger year = [diffComponents year];
NSLog(@"year:%d", year);

日時の差を求める

// NSDate *fromDate から現在までの秒数を求める
NSDate *now = [NSDate date];
NSTimeInterval since = [now timeIntervalSinceDate:fromDate];

文字列からNSDateを作成する(指定日時のNSDateを作成する)

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy.M.d";
NSDate *date = [formatter dateFromString:@"2013.7.1"];

2013年8月14日水曜日

月初の日付のNSDateを作成する

// 月初の日付のNSDateを作成する
NSDate *today = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components
= [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSWeekdayCalendarUnit
              fromDate:today];
components.day = 1;
NSDate *firstDate = [calendar dateFromComponents:components];

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat  = @"yyyy.MM.dd(E) HH:mm:ss";
NSLog(@"firstDate:%@", [formatter stringFromDate:firstDate]);

月の日数を取得する

// 今月の日数を取得
NSDate *today = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSRange range = [calendar rangeOfUnit:NSDayCalendarUnit
                               inUnit:NSMonthCalendarUnit
                              forDate:today];
NSInteger daysOfMonth = range.length;
NSLog(@"today:%@ daysOfMonth:%d", today, daysOfMonth);

実行結果
today:2013-08-14 05:17:08 +0000  daysOfMonth:31

2013年8月6日火曜日

日時の加算

// 日時の加算
NSDate *today = [NSDate date];
NSTimeInterval interval = 60 * 60 * 24;
NSDate *nextDay = [today dateByAddingTimeInterval:interval];

2013年8月5日月曜日

NSDateFormatter : 日付のフォーマット

NSDateFormatterのフォーマット(主なもののみ抜粋)
yy年号下2桁
yyyy年号4桁
M月(前0なし)
MM月2桁(前0あり)
d日(前0なし)
dd日2桁(前0あり)
h時(1〜12)(前0なし)
hh時2桁(1〜12)(前0あり)
H時(0〜23)(前0なし)
HH時2桁(0〜23)(前0あり)
m分(前0なし)
mm分2桁(前0あり)
s秒(前0なし)
ss秒2桁(前0あり)
SSミリ秒2桁(必要桁数のSを並べる)
E曜日

曜日を漢字で表記する場合は、NSDateFormatterにロケール設定する。
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"ja_JP"]];

2013年8月3日土曜日

現在時刻を取得する

NSDateのクラスメソッドdateで現在時刻を取得する。
そのままNSLogに出力するとGMT時間で表示される。
日付のフォーマットはNSDateFormatterで行う。
NSDateFormatterはロケール設定しなければ、OSのロケール設定による時間になる。
// 現在時間を取得する
NSDate *now = [NSDate date];
NSLog(@"%@", now);

// 日付のフォーマット
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy.MM.dd HH:mm:ss";
NSString *nowString = [formatter stringFromDate:now];
NSLog(@"%@", nowString);
実行結果(ログ)
2013-08-03 07:10:54 +0000
2013.08.03 16:10:54