質問

「05h:30m」のように、xxh:yym 形式の文字列がいくつかあります。xx は時間、yy は分です。このタイプの文字列を TimeSpan に変換するエレガントな方法は何ですか?

役に立ちましたか?

解決

これはうまくいくようですが、少しハック的です。

TimeSpan span;


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

他のヒント

DateTime.ParseExact または DateTime.TryParseExact 入力の正確な形式を指定できます。を取得した後、 DateTime, を掴むことができます。 DateTime.TimeOfDay これは TimeSpan.

ない場合 TimeSpan.TryParseExact, 、「エレガントな」ソリューションは選択肢にないと思います。

@buyutec ご想像のとおり、期間が 24 時間を超える場合、この方法は機能しません。

可能性の 1 つは次のとおりです。

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

コードをよりエレガントにしたい場合は、拡張メソッドを使用します。

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

そうすれば、次のことができます

"05h:30m".ToTimeSpan();

TimeSpan.Parse そして TimeSpan.TryParse オプションじゃないの?「承認された」形式を使用していない場合は、手動で解析を行う必要があります。おそらく、正規表現で 2 つの整数値を取得し、それらを整数に解析してみると思います。そこから、コンストラクターを使用して新しい TimeSpan を作成できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top