Длительность показа в миллисекундах
Я хочу показать длительность с миллисекундами на веб-странице. Пока я это сделал:
Мне удалось отобразить этот вывод на ярлыке: 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