web-dev-qa-db-ja.com

Stopwatch()で分と秒を表示する方法

分も表示する必要があります。実際には、秒を表示するためにこのコードを使用しますが、分も必要です。

TimeSpan ts = stopwatch.Elapsed;
Console.WriteLine("File Generated: " + _writer.getBinaryFileName(filePath, Convert.ToInt32(logSelected)) + " in "  + "{0}.{1:D2}" + "seconds", 
    ts.Seconds, 
    ts.Milliseconds/10 + "\n"
);

どのようにできるのか?

47
ale

以下を使用する必要があります。

ts.ToString("mm\\:ss\\.ff")

これにより、時間間隔で分、秒、100分の1秒が得られます。

http://msdn.Microsoft.com/en-us/library/ee372287.aspx もご覧ください

編集済み:数分を最大のユニットにしたい場合は、次のことができます:

string.Format("{0}:{1}", Math.Floor(ts.TotalMinutes), ts.ToString("ss\\.ff"))
67
Andrei

.NET 4.0の TimeSpan.ToString() メソッドには、形式を指定できるオーバーロードがあります。

分と秒を表示するには:

TimeSpan elapsed = GetElapsedTime(); // however you get the amount of time elapsed
string tsOut = elapsed.ToString(@"m\:ss");

ミリ秒を含めるには、次のように記述します。

string tsOut = elapsed.ToString(@"m\:ss\.ff");

ただし、合計タイムスパンが60分を超える場合、これは期待どおりには機能しないことに注意してください。表示される「分」の値はelapsed.Minutesになります。これは基本的に((int)elapsed.TotalMinutes) % 60)と同じです。したがって、合計時間が70分である場合、上記は10:00と表示されます。

合計分と秒を確実に表示するには、自分で計算する必要があります。

int minutes = (int)elapsed.TotalMinutes;
double fsec = 60 * (elapsed.TotalMinutes - minutes);
int sec = (int)fsec;
int ms = 1000 * (fsec - sec);
string tsOut = String.Format("{0}:{1:D2}.{2}", minutes, sec, ms);
19
Jim Mischel

私はこの方法でコーディングしました:

using System.Diagnostics;
...

Stopwatch watch = new Stopwatch();
watch.Start();

// here the complex program.
...

watch.Stop();

TimeSpan timeSpan = watch.Elapsed;

Console.WriteLine("Time: {0}h {1}m {2}s {3}ms", timeSpan.Hours, timeSpan.Minutes, timeSpan.Seconds, timeSpan.Milliseconds);
10
Edu Pelais

documentationでTimeSpanstopwatch.Elapsedによって返される構造体を確認してください。 MinutesまたはTotalMinutesプロパティのいずれかが必要です。

62分間のスパンを測定している場合、ts.Minutes2を返し、ts.TotalMinutes62を返します。

7

//それを試してみてください

       Stopwatch sw = new Stopwatch();

        sw.Start();

        Thread.Sleep(10382);

        sw.Stop();


        Console.Write(sw.Elapsed.Duration());
5
Felipe Augusto
ts.Minutes

0
Mark Cidade
TimeTakenOutput.Text = "0" + myStopWatch.Elapsed.Minutes.ToString() 
 + ":" + myStopWatch.Elapsed.Seconds.ToString() + "mins";
0
PLS HELP