せでぃのブログ

ブログ初心者おいどんのどうでもいい愚痴やどうでもいい愚痴やどうでもいいマメ知識などを披露するチラシの裏です。

テキストであんまりやらなかったことーカレンダーー

予告して放置してた、カレンダーの日付計算をば少々。


ほかでいくらでも解説されてるので、考えだけ。
カレンダーをプログラムで使う場合、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 を付ける

テキストであんまりやらなかったことー文字列操作ー