Получить время в миллисекундах с помощью 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(). Это помещает ваше чтение в известный ссылочный миллисекундный формат, который полностью исключает изменение дня и т. д.