2012-10-01 59 views
27

我想在TextBox只小時,以顯示和分鐘從格式轉換時間跨度 「HH:MM:SS」 到 「HH:MM」

var test = dataRow.Field<TimeSpan>("fstart").ToString(); 
//test ="08:00:00" 
var tb = (TextBox) gridViewRow.Cells[2].FindControl("fstart"); 
tb.Text = test; 

怎麼只顯示小時和分鐘"hh.mm"

+0

小費應該是看看[Roslyn CTP](http://www.microsoft.com/en-us/download/details.aspx?id=34685),我發現它非常有用用於在C#中測試格式,如果您使用的是Visual Studio。 – flindeberg

回答

53

您需要將您的數據轉換爲時間跨度,然後使用格式:"hh\:mm"

string test ="08:00:00"; 
TimeSpan ts = TimeSpan.Parse(test); 
Console.Write(ts.ToString(@"hh\:mm")); 

你的情況:

var test = dataRow.Field<TimeSpan>("fstart").ToString(@"hh\:mm")); 

記住逃脫結腸:

您可能會看到:Custom TimeSpan Format Strings

+0

爲hh.mm我用hh \。mm – Alex

+1

正是我在找什麼,謝謝@Habib – archie

+0

如果在ASP.net中出現相同的情況,那麼沒有像接受參數接受的.Tostring()這樣的方法。 –

5

您可以使用時間跨度方法:

ToString("hh':'mm") 
// or 
ToString(@"hh\:mm") 

同時檢查所有可用的格式在這裏http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

+5

不應該工作。您需要轉義冒號':' – Habib

+0

TimeSpan.ToString不支持這種格式。請參見[this](http://msdn.microsoft.com/zh-cn/library/dd992632.aspx) – th1rdey3

+2

這是.Net 4中的新增功能 – Basic

2
var test = dataRow.Field<TimeSpan>("fstart").ToString("hh.mm"); 
//test ="08:00" 
var tb = (TextBox) gridViewRow.Cells[2].FindControl("fstart"); 
tb.Text = test; 
+1

如果輸入包含':',它將在fhrat'hh時失敗.mm' – Habib

7

There沒有必要從hh.mm.ss轉換爲hh.mmTimeSpan被存儲爲多個ticks(1 tick == 100 nanoseconds)。你必須做的是將這個內部的二進制表示轉換成一個可讀的字符串!這就是所謂的格式化。如果您沒有明確指定格式,則將使用默認格式。在這種情況下,hh.mm.ss

string formatted = timespan.ToString(@"hh\.mm"); 

注意:自從.NET 4.0以來,此重載爲ToString它不支持日期和時間佔位符分隔符符號!因此,您必須將它們包含爲(轉義的)字符串文字。

格式化字符串的常用方式似乎不能用於某些奇怪的原因(使用.NET 3.5進行測試)。 (它不會使任何區別,你是否逃脫分隔符與否):

var timespan = TimeSpan.FromSeconds(1234); 
string formatted = String.Format("{0:hh.mm}", timespan); // ==> 00:20:34 

但是,您可以構建這樣

string formatted = 
    String.Format("{0:00}.{1:00}", Math.Floor(timespan.TotalHours), timespan.Minutes); 

字符串或VS2015開始/ C#6.0,使用字符串插值:

string formatted = $"{Math.Floor(timespan.TotalHours):00}.{timespan.Minutes:00}"; 
+1

不要忘記TotalHours上的Math.Floor()。 沒有這個29,7h =>獲取轉換爲30:42 ... – ErazerBrecht

0

以前的解決方案不運行,如果小時> 24,如果你在幾分鐘內非常大

有時間嘗試此解決方案3210
int minutes = 159000; 
TimeSpan t = new TimeSpan(0, minutes, 0); 

String HOURS = Math.Round(t.TotalHours, 0).ToString(); 
if (HOURS.Length==1) 
{ 
    HOURS = "0"+HOURS; 
} 


String MINUTES = t.Minutes.ToString(); 
if (MINUTES.Length == 1) 
{ 
    MINUTES = "0" + MINUTES; 
} 


String RESULT = HOURS + ":" + MINUTES; 
相關問題