2013-07-04 35 views
1

我是新來的C#,我一直在試圖創建一個代碼,顯示總工作時間..例如,一個人從早上八點到下午四點工作意味着他每天工作8小時。 我想要一個顯示他工作了多少小時的代碼。作爲文本輸入的時間之間的差異

我試圖for循環,但我沒有得到它的權利.. 請幫我

int from = Convert.ToInt32(frA.Text); 
int to = Convert.ToInt32(toA.Text); 

for (from = 0; from <= to; from++) 
{ 
    totalA.Text = from.ToString(); 
} 
+0

什麼是兩個文本框的內容是什麼? – Steve

+1

你不需要循環來計算。你需要考慮時間格式,在你的情況下4pm => 16小時24小時格式。所以基本上你需要做的是:WorkingDuration = 16 - 8; totalA.Text = WorkingDuration.ToString(); – mbm

+0

謝謝..我有你的邏輯..但在我的形式,我想讓用戶輸入時間...所以他甚至可以輸入9-5或8-8或任何隨機數字..顯示我解決這個問題? – user2549530

回答

6

一個循環是不是你需要在這裏。你可以使用DateTimeTimespan

DateTime start = new DateTime(2013, 07, 04, 08,00, 00); 
    DateTime end = new DateTime(2013, 07, 04, 16,00, 00); 

    TimeSpan ts = end - start; 

    Console.Write(ts.Hours); 

在這裏,我創建了今天(2013年4月7日)兩大DateTime對象。其中一個的開始時間爲08:00,結束時間爲16:00(下午4點)。

Timespan對象ts減去這些日期,然後可以使用.Hours屬性。

+0

我的表單是用戶生成的,只能用8-4。他可以輸入任意的時間。甚至可以輸入9-6或類似的東西 – user2549530

+2

@ user2549530 - 你可以用你的應用程序中的整數替換08和16,然後將它們傳遞給DateTime構造函數。 –

1

你首先必須將字符串轉換爲int,那麼你就可以初始化TimeSpan結構:

int from, to; 
if (int.TryParse(frA.Text, out from) && int.TryParse(toA.Text, out to)) 
{ 
    if (to <= from) 
     MessageBox.Show("To must be greater than From."); 
    else 
    { 
     TimeSpan workingHours = TimeSpan.FromHours(to - from); 
     // now you have the timespan 
     int hours = workingHours.Hours; 
     double minutes = workingHours.TotalMinutes; 
     // ... 
    } 
} 
else 
    MessageBox.Show("Please enter valid hours."); 

你並不真正需要的TimeSpan在這裏,你也可以單獨使用int。無論如何用它來表明它允許提供其他屬性,如分鐘或秒。

0

如果輸入可以採取的DateTime,那麼你可以像下面的代碼行

  double totalHours = (DateTime.Now - DateTime.Now).TotalHours;