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タイム?