くうと徒然なるままに

モバイルアプリを作りながらバックエンドも作っています。

Xamarin.iOS で DateTime を NSDate に変換する

自己紹介

初めまして、大学一年生のくぅと言います。 C# と Xamarin が好きです。 まだまだ未熟ですが、色々吸収していきます。

やっていくこと

NSDate は CocoaFX 組み込みの日付を簡易してくれるクラスです。

DataTime .NET/mono の組み込みの日付を管理してくれるクラスです。

DateTime を NSDate に変換していきたいと思います。

やったこと

変換する関数を定義した(拡張メソッドにしてもよかったかも)

ポイント

NSDate の経過時間を図る基準値は 2001年1月1日 です。 ところが、DateTime の経過時間を図る基準値は1年1月1日です。

ということで、DateTime から 2001年1月1日までの経過時間分を引いてやればNSDate と同じ経過時間になるわけです。 最後に、NSDate を秒数から作成する静的関数である FromTimeIntervalSinceReferenceDate にその経過時間を渡してあげると無事に作成されます。

サンプルコード

private NSDate DateTimeToNSData(DateTime datetime)
{
    // NSDate の基準値の2001年1月1日の日付を定義する
   DateTime reference = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(2001, 1, 1, 0, 0, 0));
   // 引数 のDateTime の経過時間の基準値を変えてNSDate と同じようにする
   return NSDate.FromTimeIntervalSinceReferenceDate((datetime - reference).TotalSeconds);
}

f:id:kuxumarin:20170111094542p:plain

まとめ

意外にこの情報は日本語でネットに出てないから困りました 今度は拡張メソッドで定義してみようかな。。。

参考サイト

http://sourcerer.tumblr.com/post/502919332/nsdate-to-datetime-and-back
sourcerer.tumblr.com

おすすめ書籍

個人的に読みやすく好きな本たちでした

かずきのXamarin.Forms入門

かずきのXamarin.Forms入門

.NET開発テクノロジ入門2016年版Visual Studio 2015対応版

.NET開発テクノロジ入門2016年版Visual Studio 2015対応版