32

C#で30:15のような文字列をTimeSpanに解析するには? 30:15 は 30 時間 15 分を意味します。

string span = "30:15";
TimeSpan ts = TimeSpan.FromHours(
    Convert.ToDouble(span.Split(':')[0])).
  Add(TimeSpan.FromMinutes(
    Convert.ToDouble((span.Split(':')[1]))));

これはあまりエレガントに見えません。

4

6 に答える 6

35

フォーマットが常に「HH:mm」であることが確実な場合は、次のようにしてみてください。

string span = "35:15";
TimeSpan ts = new TimeSpan(int.Parse(span.Split(':')[0]),    // hours
                           int.Parse(span.Split(':')[1]),    // minutes
                           0);                               // seconds
于 2010-04-28T10:02:20.057 に答える
5

ルークの答えに似ています:

String span = "123:45";
Int32 colon = span.IndexOf(':');
TimeSpan timeSpan = new TimeSpan(Int32.Parse(span.Substring(0, colon - 1)),
                                 Int32.Parse(span.Substring(colon + 1)), 0);

明らかに、元の文字列が適切な形式 (コロンで区切られた 2 つの部分で構成され、整数に解析可能) であることを前提としています。

于 2010-04-28T10:20:23.557 に答える
4

私はずっと前に考案し、今日ブログに投稿したばかりの簡単な方法を使用しています。

public static class TimeSpanExtensions
{
    static int[] weights = { 60 * 60 * 1000, 60 * 1000, 1000, 1 };

    public static TimeSpan ToTimeSpan(this string s)
    {
        string[] parts = s.Split('.', ':');
        long ms = 0;
        for (int i = 0; i < parts.Length && i < weights.Length; i++)
            ms += Convert.ToInt64(parts[i]) * weights[i];
        return TimeSpan.FromMilliseconds(ms);
    }
}

これは、以前に提供された単純なソリューションよりも多くの状況を処理できますが、独自の欠点があります。ここでさらに議論します。

.NET 4 を使用している場合は、ToTimeSpan 実装を次のように短縮できます。

public static TimeSpan ToTimeSpan(this string s)
{
    return TimeSpan.FromMilliseconds(s.Split('.', ':')
        .Zip(weights, (d, w) => Convert.ToInt64(d) * w).Sum());
}

横画面でも構わないならワンライナーでもいいのですが…

于 2011-06-21T22:11:10.847 に答える
0

通常TimeSpan.ParseExact、特定のフォーマットが必要な場合に使用します。ただし、指定できる時間形式は、日の一部としてのみです (カスタム TimeSpan 形式文字列を参照)。

したがって、自分で作業を行う必要があります。

string input = "30:24";
var parts = input.Split(':');
var hours = Int32.Parse(parts[0]);
var minutes = Int32.Parse(parts[1]);
var result = new TimeSpan(hours, minutes, 0);

(ただし、いくつかのエラーチェックが必要です。)

timespan の 3 つの整数コンストラクターは、時間 >= 24 が日数カウントにオーバーフローすることを許可します。

于 2010-04-28T10:04:43.600 に答える