iOSアプリ開発の逆引き辞典

iPhone/iPadで使えるアプリ開発のTipsをまとめてみました

UNIX時刻からNSDate型へ変換する

自動継続型購読プロダクト(Auto-Renewable Subscriptions)を購入するとレシートが発行されます。

このレシートをStore Kitを使ってVerifyReceipt(レシートの有効性確認処理)をおこなうと、下記のようなJSONデータが返ってきます。

receipt: {
    "latest_expired_receipt_info" =     {
        "expires_date" = 1306118975000;
    };
    receipt =     {
    };
    status = 21006;
}

このJSONデータのexpires_dateに該当のレシートの有効期限が含まれています。この値と現在の日時を比較することで今現在の契約が有効かどうかを検証することができます。

expires_dateは、UNIX時刻で返ってきます。UNIX時刻は、UNIX時間、UNIX時刻とPOSIX timeなどさまざまな呼ばれ方をされていますが、1970年1月1日0時0分0秒からのミリ秒で表されます。

現在時刻は、NSDateクラスのdateメソッドで取得することができますが、この数字だけではいつレシートの有効期限が切れてしまうか比較することができません。

UNIX時刻からNSDate型へ変換する

UNIX時刻からNSDate型へ変換するには、NSDateクラスのdateWithTimeIntervalSince1970:メソッドを使用します。

dateWithTimeIntervalSince1970:メソッドは、1970年1月1日0時0分0秒から指定した秒分だけ進んだNSDate型の時間を返してくれます。

単位を合わせる為に、expires_dateを1000で割っておきましょう。

// さきほどのJSONデータをパースした"expires_date"
NSString* data = @"1306118975000";

// ms -> sec
NSTimeInterval interval = [data doubleValue] / 1000;

NSDate* expiresDate = [NSDate dateWithTimeIntervalSince1970:interval];


NSLog(@"%@", expiresDate);

これで現在の時刻と比較すれば、有効期限がどれくらいかが判るかと思います。