2017-07-03 1 views
2

私はプログラミング言語で2d30mのようなこのフォーマットが何であるか知りません。しかし、私はこの時間フォーマットを使用して&t=3m11sのような時間URLにいくつかのJqueryのプラグインまたはYoutubeのジャンプを参照してください。私はexcatキーワードを知らないので、Googleには難しいです。2d30mのような文字列形式をタイムパンに変更するにはどうすればよいですか?

だから、私はこの種の形式を使用して、C#のTimeSpanオブジェクトに翻訳しました。どうすればこれを達成できますか?

今私はただ、文字列全体に対してRegex.Matchを使用

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

この[fiddle](https://dotnetfiddle.net/OYi053)はこれを示しています。ニースの解決策! – FrankerZ

+0

3桁の分、つまり "2d120m"を入力しようとすると動作しません – vantian

+0

@vantianはい残念ながら、timespan解析メソッドの制限です - 対象コンポーネントの範囲と一致しない値を受け入れません(時間、分と秒で0〜60)。 – Evk

2

このコードによって文字列から値を抽出しようとしています。

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

関連する問題