2012-05-10 15 views
30

我有兩個日期,其中一個比另一個更小。我想創建一個字符串,如這一個天,時,分,秒日期之間的兩個

「0天0小時23分18秒。」

表示兩個日期之間的差值。我怎樣才能得到這個字符串的這些元素?

+1

謝謝你們 - 我希望我能接受你們所有的答案,但這是不允許的,所以我已經把你的答案提出來了。 –

回答

70

TimeSpan是你所需要的對象:

TimeSpan span = (DateTime.Now - DateTime.Now); 

String.Format("{0} days, {1} hours, {2} minutes, {3} seconds", 
    span.Days, span.Hours, span.Minutes, span.Seconds); 
+0

但這會給我幾天,幾小時,幾分鐘和幾秒? –

+2

http://msdn.microsoft.com/en-us/library/system.timespan.aspx –

+0

只是使用span.Days,span.Hours等... –

9

當你減去另外一個DateTime,你會得到一個TimeSpan實例,它暴露的值。

TimeSpan diff = DateTime.Now - DateTime.Today; 
string formatted = string.Format(
         CultureInfo.CurrentCulture, 
         "{0} days, {1} hours, {2} minutes, {3} seconds", 
         diff.Days, 
         diff.Hours, 
         diff.Minutes, 
         diff.Seconds); 
2

您是否嘗試過使用

TimeSpan() 

,可以爲您想

3

使用時間跨度什麼一定要做

DateTime startTime = DateTime.Now; 

DateTime endTime = DateTime.Now.AddSeconds(75); 

TimeSpan span = endTime.Subtract (startTime); 
Console.WriteLine("Time Difference (seconds): " + span.Seconds); 
Console.WriteLine("Time Difference (minutes): " + span.Minutes); 
Console.WriteLine("Time Difference (hours): " + span.Hours); 
Console.WriteLine("Time Difference (days): " + span.Days); 

String yourString = string.Format("{0} days, {1} hours, {2} minues, {3} seconds", 
    span.Days, span.Hours, span.Minutes, span.Seconds); 
1

怎麼這樣呢?

TimeSpan diff = dateTimeNew - dateTimeOld; 
    string output = string.Format("{0} days, {1} hours, {2} minues, {3} seconds", diff.Days, diff.Hours, diff.Minutes, diff.Seconds); 
    Console.WriteLine(output); 
2
DateTime myDay = DateTime.Now; 
    DateTime otherDate = DateTime.Now.AddYears(1); 
    var test = otherDate.Subtract(myDay); 
    Console.WriteLine("Days:" + test.Days + "Hours:" + test.Hours +"Minutes" + test.Minutes +"Seconds" + test.Seconds); 

這裏測試是類型timestamp

+2

只是爲了避免混淆,_.TotalSeconds_將返回**總**的秒數,所以1小時的時間跨度將返回3,600 TotalSeconds。該_.Seconds_屬性將返回0秒鐘有在1個小時的時間跨度無「剩」。 – CodeHxr

+1

@CodeHxr,對。我要更新它 – Habib

3

使用TimeSpan類,當你減去的日期,你會得到的。

可以格式化使用standardcustom格式字符串輸出。

TimeSpan ts = DateTime.Now - DateTime.Today; 
Console.WriteLine(
    string.Format("{0:%d} days, {0:%h} hours, {0:%m} minutes, {0:%s} seconds", ts) 
); 

IMO,它的清潔和更容易使用string.Format代替:

「0天0小時23分18秒。」

可以像可以了爲逃避你的格式字符串的話(如果你只是使用.ToString你會需要)或手動構建起來。

1
TimeSpan diffTime = dateTimeNew -PreviousDate; 
int days=diffTime.Days; 
int hours=diffTime.Hours; 
int minutes=diffTime.Minutes; 
int seconds=diffTime.Seconds; 
+0

OP要根據計算結果建立一個字符串。你的答案中缺少那部分內容。 – kRiZ

2

不要忘了,如果你想這個計算是便攜式的,你需要把它保存爲UTC,然後當你顯示它轉換爲本地時間。作爲一般規則將日期存儲爲UTC並將其轉換爲本地時間以供演示。

相關問題