テキストであんまりやらなかったことーカレンダーー
予告して放置してた、カレンダーの日付計算をば少々。
ほかでいくらでも解説されてるので、考えだけ。
カレンダーをプログラムで使う場合、date形式のままでもstr形式でも計算できないので、じゃあどうするか? という問題が必ず付き纏う。objective-cの場合、ここが結構扱いづらかった。
方法は大雑把に2つあって、計算のために用意されている関数を使うか、str型をいちいちint型に直して計算するかという感じ。今回は日付け変更までの残り時間を表示しようと思ったんだけど、ほかに思いつかなかったのでint型に直して計算してみた。
以前やった文字列と数字の変換をここで使うということ。
// // main.m // dateformattertest // // Created by macbook on 2013/08/05. // Copyright (c) 2013年 macbook. All rights reserved. // #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { // MISSION1:現在時を表示 NSDate* now = [NSDate date]; // 現在日時取得 // 表示フォーマットを定義 NSDateFormatter *dtFormatter = [[NSDateFormatter alloc] init]; [dtFormatter setDateFormat:@"yyyy/MM/dd HH:mm:ss"]; // 現在日時を定義したフォーマットで取り込む NSString *strFormatter = [dtFormatter stringFromDate:now]; NSLog(@"現在日時=%@", strFormatter); // MISSION2:日付変更までの残り時間を表示 NSDate* now2 = [NSDate date]; // 現在日時取得 // 計算のため、時分秒で分けて表示フォーマットを定義 NSDateFormatter *dtFormatter2h = [[NSDateFormatter alloc] init]; [dtFormatter2h setDateFormat:@"HH"]; NSDateFormatter *dtFormatter2m = [[NSDateFormatter alloc] init]; [dtFormatter2m setDateFormat:@"mm"]; NSDateFormatter *dtFormatter2s = [[NSDateFormatter alloc] init]; [dtFormatter2s setDateFormat:@"ss"]; // 現在日時を定義したフォーマットで取り込む // ここ通さないと、24とか59といった形にならない NSString *strFormatter2h = [dtFormatter2h stringFromDate:now2]; NSString *strFormatter2m = [dtFormatter2m stringFromDate:now2]; NSString *strFormatter2s = [dtFormatter2s stringFromDate:now2]; //int型に変換 int ih, im, is; ih = [strFormatter2h intValue]; im = [strFormatter2m intValue]; is = [strFormatter2s intValue]; // 2桁ずつ表示 NSLog(@"日付変更まで残り=%02d:%02d:%02d", 23-ih, 59-im, 59-is); NSLog(@"dtFormatter2h変数=%@", dtFormatter2h); //表示できない } return 0; }
-------------実行結果------------- 2013-08-05 10:52:22.709 dateformattertest[987:303] 現在日時=2013/08/05 10:52:22 2013-08-05 10:52:22.711 dateformattertest[987:303] 日付変更まで残り=13:07:37 2013-08-05 10:52:22.711 dateformattertest[987:303] dtFormatter2h変数=<NSDateFormatter: 0x1001143e0> ---------------------------------
参考)
■(iPhoneプログラミング)NSDateFormatter - 文字列と日付の変換
桁数が少ない場合に、前に 0 を付ける