ラベル NSDate の投稿を表示しています。 すべての投稿を表示
ラベル NSDate の投稿を表示しています。 すべての投稿を表示

2014年10月22日水曜日

[iOS][Objective-C]NSDateの比較


どうも。

NSDate同士の比較。
これまで機会がありそうでなかったので、
どうやるんだろうかと...。

もうObjective-Cに関わって何年にもなって、
Swiftも出てきたというのに、
こういうことがちょいちょいありますw

ググれば即出てきますが、
こんなカンジです。

 
    NSDate *date1;
    NSDate *date2;

         (中略)

    NSComparisonResult result = [date compare:date2];
 
    switch (result) {
        case NSOrderedSame:
            // date1 == date2
            break;
        case NSOrderedAscending:
            // date1 < date2
            break;
        case NSOrderedDescending:
            // date1 > date2
            break;
    }


NSComparisonResultはNSNumberの比較でも使いますね。
NSNumberの比較というのも、
個人的にあまりしたことがありませんが...。

NSDateはNSDateFormatter使って、
文字列から生成することもあります。
元になる文字列が、
・フォーマット違反
・日付として無効な数値
になっているなどの場合はnilが返ってきます。
まぁ、ここまでは合点がいきます。

問題なのは、
その後のcompareです。
nilとのcompareは、
NSOrderedSameが返ってきてしまう...。

文字列が信用できるならいいんですが、
今回は文字列が人の手による入力で、
しかも事前にはチェックすらできない状況だったりします。

仕方ないので、
ある程度泥くさいチェックを書かなきゃいけませんね...。

それでは。
ちゃお☆

まこぴー。

2014年1月30日木曜日

[iOS][Objective-C]NSDateの現在時刻をローカル時刻で得る


どうも

ちょろちょろっとググれば、
NSDateを使って現在時刻を取得するのは、

NSDate *now = [NSDate date];

と書けばよい。
ということが分かるが、
上記で取得出来るのはGMT(´・ω・`)
GMTとはグリニッジ標準時間。

GMTではなく、
ローカル時刻を取得したいことがほとんどだと思うので、
そんな場合にはこう。

NSDate *now = [NSDate dateWithTimeIntervalSinceNow:
                   [[NSTimeZone systemTimeZone] secondsFromGMT]];


まぁ、
日本時間はGMTとは9時間差なので、

NSDate *now = [NSDate dateWithTimeIntervalSinceNow:(60*60*9)];

とすることもできるけど…。


それでは。
ちゃお☆


まこぴー。