2017-03-07 82 views
0

我想計算開始時間和結束時間之間的時間差。爲了使用下面的代碼。兩次之間的差異以及上午和下午在C#

string startTime = "3:10 PM"; 
string endTime = "4:50 AM"; 
TimeSpan duration =  DateTime.Parse(endTime).Subtract(DateTime.Parse(startTime)); 

這是給大多數情況下正確的答案,但在上述值的情況下它給我的答案爲「10h20m」。但凌晨4點50分至3點10分的差距爲13小時40分。

我如何計算精確差異?

+0

「*,但上午04時50分和3之間的區別:10PM是13h40m *」。你確定?記住,上午4:50和下午4:50之間的差別是12小時。 – InBetween

+1

不,上午4:50和下午3:10之間的差別是以最明顯的方式計算它的時間是10小時20分鐘......上午4:50之後的10小時是下午2:50,晚於20分鐘是3:下午10點。現在可以確定,你也可以*在13點10分到13點10分之間加上13小時40分鐘,但是在你看來這是什麼使得「更好」的答案?這聽起來像是你有一個* start *這個事實就是相關的信息,但是這個代碼中沒有任何東西可以說明任何事情。 –

+0

您還需要包含日期。 –

回答

2

也許試試這個:

string startTime = "3:10 PM"; 
string endTime = "4:50 AM"; 

DateTime start = DateTime.Parse(startTime); 
DateTime end = DateTime.Parse(endTime); 
if (start > end) 
    end = end.AddDays(1); 

TimeSpan duration = end.Subtract(start); 

Console.WriteLine(duration.ToString()); 
+0

這也是一個不錯的方法,也許比我的更準確,因爲它處理OP代碼的問題。 – Pikoh

2

這裏的問題是,你想計算涉及不同的一天。作爲一種變通方法,你可以做這樣的事情:

string startTime = "3:10 PM"; 
string endTime = "4:50 AM"; 
TimeSpan duration = DateTime.Parse(endTime) - DateTime.Parse(startTime); 
if (duration < TimeSpan.Zero) 
{ 
    duration += TimeSpan.FromDays(1); 
} 
+0

我認爲你採取的是正確的方法,但它可以更簡單地表達。記住我是否編輯? –

+0

繼續@JonSkeet – Pikoh

+0

我同意這樣會更好。謝謝@JonSkeet – Pikoh

相關問題