2017-10-06 24 views
0

所以我有6個存儲時間值的下拉列表。通過連接多個時間相關的下拉列表來計算時間

Start time 
DDL Hour - 01, 02, 03,..., 10, 11, 12 
DDL Minutes - 00, 15, 30, 45 
DDL TimeofDay - AM, PM 

Finish Time 
Same values 

我正在尋找一種方法,在索引更改時計算開始和結束之間的時間。

有沒有辦法做到這一點與我有下拉列表的數量?我已經看到幾個人使用1個下拉開始和1個完成的例子。如果一切都失敗了,我可以做到這一點,但希望有一種方法來連接3,然後顯示所花費的時間。

+2

我想你會想要做的就是創建表示開始的日期時間時間,如果您在DateTime上查找MSDN文檔,這是微不足道的。然後你會在結束時做同樣的事情,並從另一箇中減去一個。你會想寫一個*方法*來完成所有這些,你會想從所有下拉菜單的索引改變事件中調用該方法。我會爲它們使用相同的事件處理程序方法。這將涉及編寫代碼,但有些人整天都這樣做,否則就會有些有價值的生活。 –

+1

要添加到埃德說:從另一個DateTime減去會給你一個'TimeSpan'值。如果你有這些'TimeSpan'列表,那麼你可以通過調用'.Aggregate((t1,t2)=> t1 + t2)'_sum_他們(這就是我認爲你的意思是「連接」)。 – StriplingWarrior

+0

謝謝埃德。我沒有寫代碼背後的問題。只是想知道如何結合這些價值。我會考慮創建一個日期時間,因爲我有一個日曆,需要進入這個。 – maltman

回答

2

我認爲最簡單的方法爲,將3個下拉菜單得到一個DateTime值,你可以不喜歡

DateTime time = DateTime.Today.AddHours(ddHours.SelectedValue).AddMinutes(ddMins.SelectedValue); 
if (ddTimeOfDay.SelectedValue == "PM") time.AddHours(12); 

然後重複此爲另一組的3個下拉菜單。要找到差異:

TimeSpan diff = timeFinish - timeStart; 
1

如果你有文本值,你可能只是結合的一切一下子解析:

var DDLStart_Hour = // start hours dropdown value 
var DDLStart_Minute = // start minute dropdown value 
var DDLStart_Tt = // start AM/PM dropdown value 

var DDLEnd_Hour = // end hours dropdown value 
var DDLEnd_Minute = // end minute dropdown value 
var DDLEnd_Tt = // end AM/PM dropdown value 

var now = DateTime.Now; 
var start = DateTime.Parse($"{now.Month}/{now.Day}/{now.Year} {DDLStart_Hour}:{DDLStart_Minute}:00 {DDLStart_Tt}"); 
var end = DateTime.Parse($"{now.Month}/{now.Day}/{now.Year} {DDLEnd_Hour}:{DDLEnd_Minute}:00 {DDLEnd_Tt}"); 

var elapsed = end - start; // TimeSpan