2016-01-20 102 views
1

我試圖創建一個簡單的程序,在用戶輸入他們去睡覺的時間和他們醒來的時候,和輸出他們睡的總時間讀之間的區別。輸出顯示不正確,我不確定問題是什麼。我嘗試了兩種不同的代碼,但他們似乎都有同樣的問題。發現兩個日期時間(小時和分鐘)

第一個代碼是這樣的:

Console.WriteLine("Please input time you slept"); 
string sleepTime = Console.ReadLine(); 

Console.WriteLine("Please input the time you woke up"); 
string wakeTime = Console.ReadLine(); 

TimeSpan sleepDuration = DateTime.Parse(wakeTime).Subtract(DateTime.Parse(sleepTime)); 

Console.WriteLine("You slept for " + sleepDuration + " hours"); 
Console.ReadKey(); 

我我用12:00 AM對睡眠時間和8:00 AM的wakeTime第一次嘗試。輸出是8小時,這是正確的。我試圖改變的值,以11:00 PM爲休眠時間和7:00 AM爲wakeTime和產量爲-16:00,這是不正確的11:00 PM和7:00 AM之間的時間也是8小時。

這是我嘗試使用第二代碼:

Console.WriteLine("Please input the time you went to sleep"); 
DateTime sleepTime = Convert.ToDateTime(Console.ReadLine()); 

Console.WriteLine("Please input the time you woke up"); 
DateTime wakeTime = Convert.ToDateTime(Console.ReadLine()); 

TimeSpan sleepDuration = wakeTime - sleepTime; 

Console.WriteLine("You slept for " + sleepDuration + " hours"); 
Console.ReadKey(); 

我使用的確切相同的倍我爲第一代碼,並得到完全相同的輸出。 12:00 AM至8:00 AM 8:00輸出至11:00 PM至7:00 AM輸出-16:00。

是什麼造成-16:00爲輸出,我該如何解決?

+4

你只當你醒來的時間類型的問題?因爲你肯定沒有醒來早上7點你上牀睡覺了,晚上的同一天?即。你沒有睡覺,導致時間扭轉?您需要處理兩個DateTime值在不同日期的事實。基本上你計算了'7-23',那是'-16'。一個簡單的'如果(wakeTime <休眠時間)wakeTime = wakeTime.AddDays(1);'應該足夠了。 –

回答

2

的這裏的問題是,只解析與DateTime.Parse默認的日期部分DateTime.Today的時間。

如果你輸入的是你上牀睡覺了,在23:00和07:00醒了這些數值看起來像這樣(今天當我寫這個答案):

2016-01-20 23:00 
2016-01-20 07:00 

注意這是相同的日期。 DateTime.Parse有沒有在你解析值範圍內的知識,它不應該。

基本上你「反向睡」。

你應該處理這個是這樣的:

if (wakeTime < sleepTime) 
    wakeTime = wakeTime.AddDays(1); 

這將正確地代表你第二天早上醒來的事實,然後將減法正確返回8小時。

1

如果wakeTime <睡眠時間則wakeTime顯然是第二天。然後,您需要添加新的一天:

if (sleepDuration.TotalHours < 0) 
    sleepDuration += TimeSpan.FromDays(1); 
-1

同時使用日期時間解析使用僅日期 你必須給時間讓 其他精確解明智

TimeSpan sleepDuration=null; 
if(wakeTime> sleepTime) 
    sleepDuration= wakeTime - sleepTime; 
else 
sleepDuration= sleepTime-wakeTime; 
相關問題