簡體   English   中英

C#+格式時間跨度

[英]C# + Format TimeSpan

我正在嘗試將TimeSpan元素的格式設置為“ [分鍾]:[秒]”。 在這種格式下,2分8秒看起來像“ 02:08”。 我已經嘗試了String.Format和ToString方法的各種選項,但是卻收到FormatException。 這是我目前正在嘗試的方法:

DateTime startTime = DateTime.Now;
// Do Stuff
TimeSpan duration = DateTime.Now.Subtract(startTime);

Console.WriteLine("[paragraph of information] Total Duration: " + duration.ToString("mm:ss"));

我究竟做錯了什么? 如何使用所需的格式來格式化TimeSpan元素?

注意:此答案僅適用於.NET 4.0。

冒號是一個文字,需要用單引號引起來:

duration.ToString("mm':'ss")

MSDN文檔中

自定義TimeSpan格式說明符不包含占位符分隔符,例如將天與小時,小時與分鍾或秒與小數秒分隔的符號。 而是,這些符號必須作為字符串文字包含在自定義格式字符串中。

嘗試這個:

Console.WriteLine("{0:D2}:{1:D2}", duration.Minutes, duration.Seconds);

由於某些神秘的原因,TimeSpan直到.NET 4.0都沒有支持格式的ToString()重載。 對於早期版本,只要它是正數,就可以劫持DateTime.ToString():

TimeSpan ts = new TimeSpan(0, 2, 8);
string s = new DateTime(ts.Ticks).ToString("mm:ss");

.Net 4中添加了System.TimeSpan的自定義格式,因此您現在可以執行以下操作:

string.Format("{0:mm\\:ss}", myTimeSpan);

(UPDATE) ,這是使用C#6字符串插值的示例:

$"{myTimeSpan:hh\\:mm\\:ss}"; //example output 15:36:15

簡而言之,您現在需要使用“ \\”對“:”字符進行轉義(除非您使用逐字字符串,否則必須對自身進行轉義)。

此摘錄來自“ MSDN 自定義TimeSpan格式字符串”頁面,它說明了如何轉義“:”和“。”。 格式字符串中的字符:

自定義TimeSpan格式說明符不包含占位符分隔符,例如將天與小時,小時與分鍾或秒與小數秒分隔的符號。 而是,這些符號必須作為字符串文字包含在自定義格式字符串中。 例如,“ dd.hh:mm”將句點(。)定義為天和小時之間的分隔符,將冒號(:)定義為時和分鍾之間的分隔符。

日期和時間格式字符串僅適用於DateTime和DateTimeOffset。 可以使用普通格式的字符串,但是:

string.Format("{0}:{1:00}", Math.Truncate(duration.TotalMinutes), duration.Seconds)

請注意,在此處使用TotalMinutes可以確保結果花費的時間超過60分鍾時仍然正確。

嘗試這個:

DateTime startTime = DateTime.Now;
// Do Stuff
TimeSpan duration = DateTime.Now.Subtract(startTime);

Console.WriteLine("[paragraph of information] Total Duration: " + duration.Minutes.ToString("00") + ":" + duration.Seconds.ToString("00"));

您可以隨時這樣做:

string.Format("{0}:{1}", duration.Minutes, duration.Seconds);

基於這個描述了TimeSpan的ToString方法的MSDN頁面,我什至可以編譯上面的代碼有些驚訝。 TimeSpan沒有只接受一個字符串的ToString()重載。

本文還顯示了您可以轉換並用於格式化TimeSpan的函數。

您可以使用以下代碼。

TimeSpan tSpan = TimeSpan.FromSeconds(allTotalInMinutes);
string tTime = string.Format("{1:D2}:{2:D2}", tSpan.Minutes, tSpan.Seconds);

它將顯示為34:45格式。

希望對您有幫助。

TimeSpan t = TimeSpan.Parse("13:45:43");
Console.WriteLine(@"Timespan is {0}", String.Format(@"{0:yy\:MM\:dd\:hh\:mm\:ss}", t));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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