2009-04-26 12 views
0

私はiTunesとMediaMonkeysの間のインターフェイスを構築しようとしています。 iTunesからMMにトラックをインポートしたとき、フィールドLastPlayedは考慮されませんでした。DateTime to Single with C#

私は、iTunesから値を読み取り、MMデータベースを更新するインターフェイスを構築することに決めました。

MMで使用されているSQLiteデータベースにアクセスするために、phxsoftwareのパッケージを使用しています。

データベースフィールドは、DbType.SingleとしてマップされるREALデータ型です。私が更新を行うとき、私はConvert.ToSingle(DateTime)を使用して、(IITTrackによって提供される)DateTimeオブジェクトをSingleに変換しています。

しかし、私はこのことについてそのInvalid cast from 'DateTime' to 'Single'.

任意のヒントを伝える、エラーを受信して​​いますか?

答えて

5
  1. のSQLiteに簡単に変換することができます(64ビット) 。
  2. http://www.mediamonkey.com/wiki/index.php/ISDBSongData::LastPlayedによると、あなたは、次の操作を行う必要があります。

    LastPlayed.Subtract(新しいのDateTime(1899、12、30、0、0、0、DateTimeKind.Utc))TotalDays。

それはいくつかの静的な読み取り専用の値にその一定の日を移動するために、実際に良いでしょう...

P.S. SQLiteは整数ではなく、浮動小数点数は誤っているというコメント - 8バイトの浮動小数点数と8バイトの整数の2つの数値型しかありません。

+0

私は分かりません...このソリューションのように思えるのは、時刻ではなく日付(日)を保存するだけです –

+1

ちょっとした修正:LastPlayed.Subtract(new DateTime(1899,12,30,0,0,0、 DateTimeKind.Utc)) –

+0

これは真実ではありません。浮動小数点値として日数を保存します。そのため、実際には時間も含まれています。 – Mash

2

のDateTimeが長いタイプのダニ特性を持っているので、あなたはそれが実際にダブルスを使用してのシングル(単精度32ビット)を使用していないシングル

Convert.ToSingle(DateTime.Ticks); 
+0

SQLite REALフィールドがどの単位で測定されているか、ベースラインが何であるかに応じて(おそらく、1970年1月1日、1970年1月1日など)、彼はおそらくスケールしてオフセットする必要があります。 – itowlson

+0

IIRCでは、SQLiteは実際にはintとfloatを区別しませんが、単に「Number」を持っています。つまり、フィールドをマップして、おそらく注意の面で間違って浮動小数点にしました。 – Blorgbeard

+0

あなたは間違っています。 SQLiteのドキュメント: #INTEGER値は符号付き整数で、値の大きさに応じて1,2,3,4,6、または8バイトに格納されます。 #REAL。値は浮動小数点値で、8バイトのIEEE浮動小数点数として格納されます。 – Mash