Дубликат: How to get timestamp of tick precision in .NET/C#?
Как я получаю от Stopwatch.GetTimestamp() на DateTimeКак я могу получить от секундомера.GetTimestamp() до DateTime?
Предположим Stopwatch.IsHighResolution верно
Дубликат: How to get timestamp of tick precision in .NET/C#?
Как я получаю от Stopwatch.GetTimestamp() на DateTimeКак я могу получить от секундомера.GetTimestamp() до DateTime?
Предположим Stopwatch.IsHighResolution верно
Если это высокое разрешение счетчика, нет никакой гарантии, что значение имеет какой-либо корреляция с реальным временем - например, это может быть «тики с момента загрузки компьютера». Для не - таймер с высоким разрешением, вы можете использовать new DateTime(Stopwatch.GetTimestamp())
, но это не обязательно даст полезное значение для таймера с высоким разрешением. (Это, конечно, не на моей коробке.)
Для чего вы это пытаетесь использовать? Идея Stopwatch
заключается в измерении интервалов времени.
Хотел спросить, почему «нет корреляции»? OS ticks являются постоянными, поэтому 100 мс должно быть очень похоже на 100 мс на любых часах (с точки зрения интервала). Единственный способ, которым они должны отличаться, это смещение между реальным временем и инициализацией счетчика OS-тигма, правильно? После инициализации счетчика тиков Os длина интервала должна быть такой же, как и для «любых» точных часов? –
@ Mindaugas: Системные часы могли быть изменены из-за изменения часового пояса, ручной коррекции времени или автоматической коррекции, например. через NTP. Дело в том, что если вы хотите измерить прошедшее время, вы используете секундомер, но это * не даст вам DateTime, потому что он измеряет только прошедшее время. –
Спасибо большое! Я думал о более коротком диапазоне времени, но спасибо за то, что дал мне больше понимания. –
Имейте в виду, что если вы пытаетесь отслеживать прошедшее время вы должны использовать:
Stopwatch sw = Stopwatch.StartNew();
//do stuff
sw.Elapsed; //or
sw.ElapsedMilliseconds;
Это точно конвертирует клещей в реальном масштабе времени. Преобразование тиков в DateTime, а затем сравнение DateTimes также будет работать, но выше это проще.
Некоторые из них (в том числе и я) ошибочно использовали код, как это, и получил плохие времена из него:
startTime = Stopwatch.GetTimestamp();
totalTime = (Stopwatch.GetTimestamp() - startTime)/10000;
//it was assumed 10,000 ticks was a millisecond, incorrectly
Секундомер. Частота, которая представляет собой количество тиков pr. сек, можно исправить ваш последний пример: elapsedMs = (секундомер.GetTimestamp() - startTime)/(секундомер. Частота/1000); – Jens
почему бы не использовать DateTime.Now? – deostroll