2009-04-26 2 views
0

나는 iTunes와 MediaMonkeys 사이의 인터페이스를 구축하려고합니다. iTunes에서 내 트랙을 MM으로 가져온 경우 LastPlayed 필드는 고려되지 않았습니다.DateTime to C#을 사용하여

그래서 iTunes에서 값을 읽고 MM 데이터베이스를 업데이트하는 인터페이스를 작성하기로 결정했습니다.

MM에서 사용하는 SQLite 데이터베이스에 액세스하려면 phxsoftware 패키지를 사용하고 있습니다.

데이터베이스 필드는 DbType.Single로 매핑되는 REAL 데이터 형식입니다. 업데이트를 수행 할 때 Convert.ToSingle (DateTime)을 사용하여 DateTime 객체 (IITTrack에서 제공)를 Single로 변환합니다.

하지만 그 Invalid cast from 'DateTime' to 'Single'.

이것에 대해 어떤 힌트를 말하는 오류를 받고 있어요?

답변

5
  1. SQLite는 쉽게 변환 할 수 있습니다 (64 비트) .
  2. http://www.mediamonkey.com/wiki/index.php/ISDBSongData::LastPlayed에 따르면 당신은 다음을 수행해야합니다

    LastPlayed.Subtract (새 날짜 시간 (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, 0, DateTimeKind.Utc)) –

+0

사실이 아닙니다. 부동 소수점 값으로 일 수를 저장하기 때문에 시간이 실제로 포함되어 있기 때문입니다. – Mash

2

날짜 시간이 긴 타입의 눈금 속성이 있습니다, 그래서 당신은 실제로 두 배를 사용하고 단일 (단 정밀도 32 비트)를 사용하지 않는 단일

Convert.ToSingle(DateTime.Ticks); 
+0

SQLite REAL 필드가 측정하는 단위와 기준선 (예 : 1 Jan 0001, 1970 년 1 월 1 일 등)에 따라 조정 및 오프셋이 필요할 수 있습니다. – itowlson

+0

IIRC, SQLite는 실제로 int와 float을 구별하지 못합니다. 단지 'Number'가 있습니다. 따라서 매핑 된 필드는주의를 요하는 부분에서 잘못 해석되어 플로트가됩니다. – Blorgbeard

+0

틀렸어. SQLite 문서에서 : # INTEGER. 값은 부호가있는 정수이며 값의 크기에 따라 1, 2, 3, 4, 6 또는 8 바이트로 저장됩니다. # REAL. 값은 부동 소수점 값이며 8 바이트 IEEE 부동 소수점 숫자로 저장됩니다. – Mash

관련 문제