Длительность показа в миллисекундах

Я хочу показать длительность с миллисекундами на веб-странице. Пока я это сделал: Мне удалось отобразить этот вывод на ярлыке: 00:02:50, но я хочу также отображать миллисекунды, поэтому результат должен выглядеть так: 00: 02: 50: 000. Как мне это достичь?

Код позади:

protected void Page_Load(object sender, EventArgs e)
{
    DateTime startTime = DateTime.Now;
    // sleep for 2.5s
    Thread.Sleep(2500);
    DateTime stopTime = DateTime.Now;
    TimeSpan duration = stopTime - startTime;
    Result.Text = duration.ToString("mm':'ss':'ff");
}

Ответ 1

Прежде всего, если вы хотите настроить время, я бы рекомендовал использовать класс StopWatch для этого. Вы можете найти его в пространстве имен System.Diagnostics: System.Diagnostics.Stopwatch.

Вы можете создать новый экземпляр и начать измерение прошедшего времени с помощью одной строки кода: var stop = System.Diagnostics.Stopwatch.StartNew();, а затем остановить таймер с помощью метода остановки: stop.Stop();. Затем вы можете вернуть прошедшее время, используя свойство Elapsed var elapsed = stop.Elapsed;.

Затем, чтобы отобразить прошедшее время с миллисекундами, вы должны вызвать метод ToString в течение прошедшего времени с правильными параметрами.

Таким образом, все вместе, ваш код будет выглядеть так:

protected void Page_Load(object sender, EventArgs e)
{
    var timer = System.Diagnostics.Stopwatch.StartNew();
    // sleep for 2.5s
    Thread.Sleep(2500);
    timer.Stop();
    var elapsed = timer.Elapsed;
    Result.Text = elapsed.ToString("mm':'ss':'fff");
}

Надеюсь, что это поможет!

Джеймс

Ответ 2

В вашем текущем коде должно отображаться минуты, секунды и сотые доли секунды.

Result.Text = duration.ToString("mm':'ss':'ff");

Чтобы отобразить миллисекунд вместо сотых долей секунды:

// output: 00:02:500
Result.Text = duration.ToString("mm':'ss':'fff");

См. документацию Пользовательские строки формата даты и времени.

Ответ 3

doc говорит: "fff" дает вам:

Миллисекунды в значении даты и времени.

Вы используете "ff", который дает вам:

Сотые доли секунды в значении даты и времени.

Итак, измените свой код на:

duration.ToString("mm':'ss':'fff");

Ответ 4

Я думаю, вы в замешательстве. В вашем случае 00:02:50 означает 2 секунды и 50 сотых секунды. Если вы хотите отображать миллисекунды, используйте формат, например mm':'ss':'fff (обратите внимание на добавленный f). Это напечатает что-то вроде 00:02:500, то есть 2 секунды и 500 тысячных секунды, или 2 с 500 мс.

Но это не означает, что ваши измерения будут точными до миллисекунды. Это не то, что должен делать DateTime.Now. Если вы хотите сделать измерения точными, вы должны использовать StopWatch.

Ответ 5

В противном случае просто используйте свойства из временных интервалов, например:

var result = String.Format("{0}:{1}:{2}", duration.Minutes, duration.Seconds, duration.Milliseconds);
Result.Text = result

Таким образом, я думаю, что вы получаете больше контроля над тем, что хотите отображать, вместо форматирования временного интервала в методе ToString(), который более легко позволяет создавать опечатки...

Надеюсь, это поможет!

Update: Чтобы добавить часы, вот как это будет выглядеть:

var result = String.Format("{0}:{1}:{2}:{3}", duration.Hours, duration.Minutes, duration.Seconds, duration.Milliseconds);

Ответ 6

Используйте метод TimeSpan.ToString с пользовательским форматом.

Возвращенная строка форматируется с помощью спецификатора формата "c" и имеет следующий формат:

[-][d.]hh:mm:ss[.fffffff]

Элементы в квадратных скобках ([и]) могут не включаться в возвращаемую строку. Колонки и периоды (: и.) Являются буквальными символами.

Result.Text = duration.ToString("mm:ss:fff");

или

Result.Text = duration.ToString("hh:mm:ss.fff");

Ссылка: Пользовательские строки формата даты и времени, "fff" Спецификатор пользовательского формата

DateTime date1 = new DateTime(2008, 8, 29, 19, 27, 15, 18);
CultureInfo ci = CultureInfo.InvariantCulture;
Console.WriteLine(date1.ToString("hh:mm:ss.fff", ci));
// Displays 07:27:15.018