Получить время в миллисекундах с помощью C#
Я делаю программу, в которой мне нужно получить время в миллисекундах. Под временем я подразумеваю число, которое никогда не равно самому себе и всегда на 1000 чисел больше, чем это было секунду назад. Я пробовал конвертировать DateTime.Now
до TimeSpan
и получении TotalMilliseconds
от этого... но я слышал, что это не совсем точно.
есть ли более простой способ сделать это?
7 ответов:
использовать
Stopwatch
класса.предоставляет набор методов и свойства, которые можно использовать для точно измерьте прошедшее время.
есть хорошая информация о его реализации здесь:
тесты производительности: точные измерения времени выполнения с системой.Диагностика.Секундомер
long milliseconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
это на самом деле, как различные методы преобразования Unix реализованы в
DateTimeOffset
класс (.NET Framework 4.6+, .NET Standard 1.3+):long milliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds();
на
DateTime.Ticks
свойство получает количество тиков, представляющих дату и время.10 000 тиков-это миллисекунда (10 000 000 ТИКов в секунду).
вы можете попробовать
QueryPerformanceCounter
собственный метод. См.http://www.pinvoke.net/default.aspx/kernel32/QueryPerformanceCounter.html для получения дополнительной информации. ЭтоStopwatch
класс использует.посмотреть как получить метку времени точности тика в .NET / C#? для получения дополнительной информации.
Stopwatch.GetTimestamp()
дает доступ к этому методу:public static long GetTimestamp() { if(IsHighResolution) { long timestamp = 0; SafeNativeMethods.QueryPerformanceCounter(out timestamp); return timestamp; } else { return DateTime.UtcNow.Ticks; } }
Я использую следующий класс. Я нашел его в интернете один раз, постулируется, чтобы быть лучшим сейчас().
/// <summary>Class to get current timestamp with enough precision</summary> static class CurrentMillis { private static readonly DateTime Jan1St1970 = new DateTime (1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); /// <summary>Get extra long current timestamp</summary> public static long Millis { get { return (long)((DateTime.UtcNow - Jan1St1970).TotalMilliseconds); } } }
источник неизвестен.