Вопрос

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

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

Это было полезно?

Решение

Использовать Stopwatch сорт.

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

Есть хорошая информация о реализации этого здесь:

Испытания по производительности: точные измерения времени выполнения с System.diagnostics.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/aqueryperformancounter.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.now.timeofday.totalmilliseconds (на текущий день), надеюсь, это поможет вам также.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top