2008-08-25 14 views
29

xx saat ve yy'nin "05h: 30m" gibi dakikalar olduğu xxh: yym biçiminde bazı dizelerim var. Bu tür bir dizeyi TimeSpan'a dönüştürmenin zarif bir yolu nedir?Dizgi, TimeSpan için ayrıştır

TimeSpan span; 


if (TimeSpan.TryParse("05h:30m".Replace("m","").Replace("h",""), out span)) 
      MessageBox.Show(span.ToString()); 

cevap

26

Bu, iş gibi görünüyor? "Onaylanmış" bir biçim kullanmıyorsanız, ayrıştırma işlemini manuel olarak yapmanız gerekir. Muhtemelen iki tamsayı değerinizi düzenli bir ifadede yakalarım ve daha sonra bunları tamsayılara ayırmaya çalışacağım, oradan kurucusu ile yeni bir TimeSpan yaratabilirsiniz.

+15

: 30m – mike

+2

için': Bu çözüm 23h ile sınırlıdır: 59m –

+1

not dize 25 saat olduğu zamanlar hariç daha temiz ve daha sağlam çözümü – fubo

6

DateTime.ParseExact veya DateTime.TryParseExact girmek kesin biçimini belirlemenizi sağlar. DateTime'u aldıktan sonra, TimeSpan olan DateTime.TimeOfDay'u yakalayabilirsiniz. TimeSpan.TryParseExact yokluğunda

, bir 'şık' çözüm karışımı dışında olduğunu düşünüyorum.

@buyutec Şüphelendiğiniz gibi, zaman aralığı 24 saatten fazla olduğunda bu yöntem işe yaramaz.

+0

[TimeSpan.TryParseExact] (http://msdn.microsoft.com/ tr-us/library/system.timespan.tryparseexact% 28v = vs.100% 29.aspx) .NET 4.0 'da eklendi –

2

Here'e bir olasılık:

TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1)); 

Ve kodunuzda daha şık yapmak istiyorsanız, bir uzantısı yöntemi kullanın:

Sonra
public static TimeSpan ToTimeSpan(this string s) 
{ 
    TimeSpan t = TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1)); 
    return t; 
} 

Yapabileceğiniz

"05h:30m".ToTimeSpan(); 
başka dizisinden
+0

' TimeSpan.TryParse ("hh'h: 'mm'm'" hakkında neler var, dışarı span) '? https://stackoverflow.com/a/26769/206730 – Kiquenet