![](/img/trans.png)
[英]Determine the difference between two DateTimes, only counting opening hours
[英]Finding the difference between two DateTimes (hours and minutes)
我正在嘗試創建一個簡單的程序,以讀取用戶入睡時間和醒來時間的輸入,並輸出他們睡眠的總時間。 輸出顯示不正確,我不確定是什么問題。 我嘗試了兩種不同的代碼,但是它們似乎都遇到了相同的問題。
第一個代碼是這樣的:
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用作sleepTime,將8:00 AM用作wakeTime。 輸出為8小時,這是正確的。 我嘗試將sleepTime的值更改為11:00 PM,將akeTime的值更改為7:00 AM,並且輸出為-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成為輸出,我該如何解決?
這里的問題是,僅使用DateTime.Parse
解析時間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個小時。
如果wakeTime <sleepTime,那么wakeTime顯然是第二天。 然后,您需要添加另一天:
if (sleepDuration.TotalHours < 0)
sleepDuration += TimeSpan.FromDays(1);
僅使用日期使用日期時間解析時出現問題,否則您必須給日期以其他方式獲得確切的解決方案
TimeSpan sleepDuration=null;
if(wakeTime> sleepTime)
sleepDuration= wakeTime - sleepTime;
else
sleepDuration= sleepTime-wakeTime;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.