酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

C#でDateTimaからUNIX時刻へ変換する

iOSアプリの移植をするにあたり、UNIX時刻*1を取得する必要が出てきました。

具体的に言うと、iOSではtimeIntervalSince1970メソッドを使えば、NSDateオブジェクトで保持している時刻からUNIX時刻を求めることができます。

// 期限切れとなる時間をUNIX時刻で取得する
NSDate* expireDate = [self getExpireDate];
NSTimeInterval expireTime = [expireDate timeIntervalSince1970];

上記と同等の処理をC#に移植したいと考えています。どうもC#にはUNIX時刻を一発で取得するメソッドがないようですので、1970/1/1からの時刻の差分を取得するDateTimeの拡張メソッドを作成します。

public static class DateTimeExtensions
{
    public static double ToIntervalSince1970(this DateTime date)
    {
        // 1970/1/1のDateTimeオブジェクトを作成する
        var baseDate = new DateTime(1970, 1, 1, 
                                    0, 0, 0, 0, DateTimeKind.Utc);
        // 1970/1/1からの差分を求める
        var span = date.ToUniversalTime() - baseDate;
        return span.TotalSeconds;
    }
}

あとはさっきのObjective-Cのコードを拡張メソッドを使ったC#のコードに変換します。

// 期限切れとなる時間をUNIX時刻で取得する
var expireDate = this.GetExpireDate();
var expireTime = expireDate.ToIntervalSince1970();

テストコード書いて成功したのでブログに書きましたが、こんな感じで如何でしょうか?

*1:UNIX時間?エポックタイム?POSIXタイム?