Получите время в миллисекундах, используя C # - PullRequest
109 голосов
/ 25 октября 2010

Я делаю программу, в которой мне нужно получить время в миллисекундах.Под временем я имею в виду число, которое никогда не бывает равным самому себе, и всегда на 1000 чисел больше, чем было секунду назад.Я пытался преобразовать DateTime.Now в TimeSpan и получить TotalMilliseconds из этого ... но я слышал, что это не совсем точно.

Есть ли более простой способ сделать это

Ответы [ 7 ]

272 голосов
/ 25 октября 2010
long milliseconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;

Так на самом деле реализуются различные методы преобразования Unix в классе DateTimeOffset (.NET Framework 4.6+, .NET Standard 1.3+):

long milliseconds = DateTimeOffset.Now.ToUnixTimeMilliseconds();
75 голосов
/ 25 октября 2010

Используйте класс Stopwatch.

Предоставляет набор методов и свойств, которые можно использовать для точного измерения прошедшего времени.

Хорошая информация о его реализации приведена здесь:

Тесты производительности: точные измерения времени выполнения с помощью System.Diagnostics.Stopwatch

13 голосов
/ 25 октября 2010

Свойство DateTime.Ticks получает число тиков, представляющих дату и время.

10 000 Тиков - это миллисекунды (10 000 000 тиков в секунду).

8 голосов
/ 25 октября 2010

Вы можете попробовать QueryPerformanceCounter собственный метод.См. http://www.pinvoke.net/default.aspx/kernel32/QueryPerformanceCounter.html для получения дополнительной информации.Это то, что использует класс Stopwatch.

См. Как получить временную метку точности тиков в .NET / C #? для получения дополнительной информации.Доступ к этому методу:

public static long GetTimestamp() {
     if(IsHighResolution) {
         long timestamp = 0;
         SafeNativeMethods.QueryPerformanceCounter(out timestamp);
         return timestamp;
     }
     else {
         return DateTime.UtcNow.Ticks;
     }
 }
7 голосов
/ 24 февраля 2013

Я использую следующий класс.Однажды я нашел его в Интернете, постулируя, что он лучший СЕЙЧАС () .

/// <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); } }
}

Источник неизвестен.

5 голосов
/ 17 августа 2012

Я использовал DateTime.Now.TimeOfDay.TotalMilliseconds (для текущего дня), надеюсь, он вам тоже поможет.

1 голос
/ 17 сентября 2012

Используйте System.DateTime.Now.ToUniversalTime(). Это переводит ваше чтение в известный справочный миллисекундный формат, который полностью исключает смену дня и т. Д.

...