我有一個儲存場所及它們的持續時間的開始時間一些數據庫的價值,但時間值存儲爲小數。舉例十進制日期時間轉換和比較在實體框架
12.45 = 12:45 PM
12:59 = 12:45 PM
13.0 = 13:00 PM
持續時間存儲爲int; 30 = 30分鐘
在這裏,我必須檢查特定時間是否在範圍之間,所以我使用了C#和實體框架,並且我使用了下面的代碼,但它給出了DateTime.Parse不能成爲的錯誤由LINQ識別。
STAR_TIME是被存儲爲12.45和 DURATION被存儲爲30 和時間的時間被一個日期時間類型
meal ml = HRM.meals.SingleOrDefault(p => p.SHIFTCODE == ShiftCode
&& DateTime.Parse(p.STAR_TIME.ToString().Replace(".", ":")) <= timE
&& DateTime.Parse(p.STAR_TIME.ToString().Replace(".", ":")).AddMinutes(int.Parse(p.DURATION.ToString())) >= timE
);
然後,而不是轉換我試圖通過60相乘,並試圖值的比較結果爲下面,但其邏輯錯誤。 這裏12.59被用作時間
meal ml = HRM.meals.SingleOrDefault(p => p.SHIFTCODE == ShiftCode
&& p.STAR_TIME*60 <= new Decimal(12.59)*60
&& p.STAR_TIME*60 + p.DURATION >= new Decimal(12.59) * 60
);
STAR_TIME - 12.45 * 60 - 747 DURATION - 30 結束時間 - 747+ 30 = 777
但實際上結束時間應13.15 , 13.15 * 60 - 789
有人建議可以應付這一局面的任何方法?
有很可能是一招(還在想着它),但真正的答案永遠是:時間值存儲爲小數=>不!將它們存儲爲...時間值(TIME,DATETIME或任何適合的值,但不是小數)! –
是的,事情是即將集成新的模塊與現有的軟件,所以在該數據庫日期時間存儲在這個怪異的方式。 我以實體框架,我不能做轉換到12.45 12:45字符串,並將其解析在C#datetime或時間跨度,但在這裏,因爲即時通訊前解決它:S –
應該在價值觀的第一個表格的第二行寫着: '12.59 = 12:59 PM'? –