2016-06-16 77 views
-1

我無法比較時間。比較沒有日期的時間?

從我研究過它最有可能是由於沒有約會的時間。

我的代碼, 這將從數據庫中獲得dateTime值。

var getDateTime = sql.Staff_Time_TBLs.Where(p => p.Staff_No == 
     SelectedEmployee.Key && p.Date_Data == day).Select(p => p.Time_Data_1).ToList(); 
DateTime dateTimeGet = Convert.ToDateTime(getDateTime); 

dateTimeGet返回這樣"2012/12/12 15:03:00.000"

一個值,那麼我宣佈變量來保存時間。

TimeSpan startCompare = TimeSpan.Parse("15:00"); 
TimeSpan endCompare = TimeSpan.Parse("21:00"); 

然後比較值Compare DateTime

if ((endCompare > dateTimeGet) && (startCompare < dateTimeGet)) 
    { 
     //match found 
    } 

我得到一個編譯錯誤,

operands cannot be given to to type timespan and datetime 

如何在這種情況下比較倍?

+0

[TimeSpan.Compare方法](https://msdn.microsoft.com/ en-us/library/system.timespan.compare(v = vs.110).aspx) – Draken

+4

也許使用'DateTime.TimeOfDay'?然後你會比較兩個'TimeSpan'的值... –

+1

@JonSkeet,這個技巧,謝謝你。任何想法爲什麼這個職位會被投票?在我發佈之前,我盡力找到任何答案,因爲我自學成就了。幾個月前我買了你的書,對我來說仍然有點高級,但即使是我的關卡人也可以使用,但已經發現了一些非常有用的東西。再次感謝。 – KyloRen

回答

3

只需編輯您的代碼,如下所示:

if ((endCompare > dateTimeGet.TimeOfDay) && (startCompare < dateTimeGet.TimeOfDay)) 
    { 
     //match found 
    } 
+0

謝謝,這有幫助。投票的幫助。 – KyloRen

2

您可以創建DateTime值,而不是TimeSpan比較值的,使用你的數據庫的時間Date

DateTime startCompare = dateTimeGet.Date.AddHours(15); 
DateTime endCompare = dateTimeGet.Date.AddHours(21); 
if ((endCompare > dateTimeGet) && (startCompare < dateTimeGet)) 
{ 
    // match found 
} 

在你表現出的例子,其實就足以比較Hour部分dateTimeGet

if (dateTimeGet.Hour >= 15 && dateTimeGet.Hour <= 21) 
    // match found 
+1

紫外線需要時間來幫助。謝謝 – KyloRen

3

其實你用日期endCompare > dateTimeGet比較時間,讓您得到錯誤

操作數不能給予鍵入入庫時間和日期時間

要比較你的時間跨度需要通過簡單地使用TimeOfDay來提取從dateTimeGet開始的日期。

if ((endCompare > dateTimeGet.TimeOfDay) && (startCompare < dateTimeGet.TimeOfDay)) 
{ 
    //match found 
} 

這會將日期轉換爲時間。欲瞭解更多有關TimeOfDayclick here的詳細信息,希望這工作正常適合你。

+0

我錯誤地添加了'ToShortTimeString()'。你需要添加'TimeOfDay'。編輯我的答案,請檢查它。 –

+1

感謝這有助於。我積極尋求幫助。 – KyloRen

1

的問題是,當你正確地說,你是比較日期時間

一個time-span以小時計算時間的測量,其中作爲date-time就是以天計的時間測量

所以2012/12/12 15:03:00.000約爲735248.625 days17645967 hours 你,然後比較的15 hours

時間跨度,所以你需要以添加735248 days到您的時間跨度Ø [R下降735248 days形成你的日期

都可以輕鬆完成 如果您撥打的日期時間TimeOfDay屬性就會忽略天,就回到0.625 days15 hours

這意味着你的代碼看起來像這樣

if ((endCompare > dateTimeGet.TimeOfDay) && (startCompare < dateTimeGet.TimeOfDay))

OR

如果添加了時間跨度爲t他在午夜時間它會創建正確的日期時間比較 -

這意味着你的代碼看起來像這樣

if ((dateTimeGet.Date + endCompare > dateTimeGet) && (dateTimeGet.Date + startCompare < dateTimeGet.TimeOfDay))

+1

紫外線需要時間來幫忙。謝謝 – KyloRen