タイムスタンプ文字列をTimeSpan
オブジェクトに変換しようとしています。 しかし、TimeSpan.Parse()
は私が期待するように動作しません。理由を説明します。h:m:sとm:sの文字列をTimeSpanオブジェクトに変換する簡単な方法は何ですか?
変換したいタイムスタンプには2種類あります。
- 分:秒
30:53
,1:23
,0:05
- 時間:分:秒
TimeSpan.Parse()
方法で分形式:1:30:53
、2:1:23
、0:0:3
問題は、タイプ1の時間として解釈されます。
Console.WriteLine(TimeSpan.Parse("12:43"));
// the result I expect -> 0:12:43
// the actual result -> 12:43:00
私はこの問題を検出し、このSOのポストを見つけました。
Parse string in HH.mm format to TimeSpan
これは、DateTime.ParseExact()
を使用して特定の形式の文字列を解析します。しかし、問題はタイプ1とタイプ2で異なるフォーマットを使用する必要があるということです。
// ok
var ts1 = DateTime.ParseExact("7:33", "m:s", CultureInfo.InvariantCulture).TimeOfDay;
// throws an exception
var ts2 = DateTime.ParseExact("1:7:33", "m:s", CultureInfo.InvariantCulture).TimeOfDay;
// throws an exception
var ts3 = DateTime.ParseExact("7:33", "h:m:s", CultureInfo.InvariantCulture).TimeOfDay;
// ok
var ts4 = DateTime.ParseExact("1:7:33", "h:m:s", CultureInfo.InvariantCulture).TimeOfDay;
私はMSDNもチェックしましたが、それは役に立ちませんでした。
https://msdn.microsoft.com/ja-jp/library/se73z7b9(v=vs.110).aspx
私が思い描いた解決策は次のとおりです。
とA. DateTime.ParseExact
場合
string s = "12:43";
TimeSpan ts;
if (s.Count(c => c == ':') == 1)
ts = DateTime.ParseExact(s, "m:s", CultureInfo.InvariantCulture).TimeOfDay;
else
ts = DateTime.ParseExact(s, "h:m:s", CultureInfo.InvariantCulture).TimeOfDay;
B. TimeSpan.Parse
と
string s = "12:43";
if (s.Count(c => c == ':') == 1)
s = "0:" + s;
var ts = TimeSpan.Parse(s);
しかし、それらの両方が長いとされていない場合は "クール"。私は車輪を再発明しているように感じます。私は彼らを望んでいません。
h:m:sとm:sの文字列をTimeSpanオブジェクトに変換する簡単な方法は何ですか?
ありがとうございます!