Получить время в миллисекундах с помощью 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); } }
}
источник неизвестен.
Я использовал DateTime.Сейчас.TimeOfDay.TotalMilliseconds (для текущего дня), надеюсь, что это поможет вам.
использовать System.DateTime.Now.ToUniversalTime()
. Это помещает ваше чтение в известный ссылочный миллисекундный формат, который полностью исключает изменение дня и т. д.