2017-07-03 47 views
2

我不知道在編程語言中叫做2d30m這種格式是什麼。但是,我看到一些Jquery插件或Youtube跳轉到使用此時間格式的&t=3m11s網址。這很難谷歌,因爲我不知道excat關鍵字。如何將像2d30m這樣的字符串格式更改爲時間跨度?

所以,我想在C#中使用這種格式並將其轉換爲TimeSpan對象。我怎樣才能做到這一點?

現在,我想通過這個代碼

public static void Main() 
{ 
    String str = "2d30m"; 
    int day = 0, minute = 0; 
    //Get Day 
    day = Helper(str, "d"); 
    //Get Minute 
    minute = Helper(str, "m"); 
    //Create timespan 
    var myTimeSpan = new TimeSpan(days: day, hours: 0, minutes: minute, seconds: 0); 
    Console.Write(myTimeSpan); 
} 

public static int Helper(string input, string timeCode) 
{ 
    int output = 0; 
    int indexOf = input.LastIndexOf(timeCode, StringComparison.OrdinalIgnoreCase); 
    if (indexOf > 0) 
    { 
     string strTime = input.Substring(Math.Max(0, indexOf - 2), 2); 
     Console.WriteLine(strTime); 
     strTime = System.Text.RegularExpressions.Regex.Replace(strTime, "[^0-9.]", ""); // remove all alphabet 
     output = Convert.ToInt32(strTime); 
    } 

    return output; 
} 

回答

3

您可以使用TimeSpan.ParseExact

var str = "2d30m"; 
// d matches both 1 and 2 digit days 
// \d means literal "d" 
// m matches both 1 and 2 digit minutes 
// \m is literal "m" 
var timeSpan = TimeSpan.ParseExact(str, @"d\dm\m", CultureInfo.InvariantCulture); 
+0

這[小提琴](https://dotnetfiddle.net/OYi053)顯示這個作品。好的解決方案 – FrankerZ

+0

這是行不通的,如果我嘗試輸入三位數分鐘,即「2d120m」 – vantian

+0

@vantian不幸的是,這是時間分析方法的限制 - 它不接受與目標組件範圍不匹配的值(0-24小時, 0-60分鐘和秒)。 – Evk

2

來提取字符串值,只需要使用Regex.Match對整個字符串。容易夠得着組:

public static void Main() 
{ 
    var str = "2d30m"; 
    //Regex match and find the 2 & 30 
    var matches = Regex.Match(@"^(\d+)d(\d+)m$", str); 
    //Get Day 
    var day = int.Parse(matches.Groups[1].Value); 
    //Get Minute 
    var minute = int.Parse(matches.Groups[2].Value); 
    //Create timespan 
    var myTimeSpan = new TimeSpan(days: day, hours: 0, minutes: minute, seconds: 0); 
    Console.Write(myTimeSpan); 
} 

dotnetfiddle這裏。

+0

真棒,它的作品。你介意解釋一下正則表達式在代碼中的作用嗎? – vantian

+0

@vantian查看右上角[此處]的說明部分(https://regex101.com/r/Qi3L9m/1)。 – FrankerZ

+0

明白了,我只知道我們是否可以使用正則表達式中的數組。每天學些新東西。 – vantian

相關問題