簡體   English   中英

找出兩個DateTime之間的時差(小時和分鍾)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM