سؤال

أقوم بعمل برنامج أحتاج فيه للحصول على الوقت بالميلي ثانية. بحلول الوقت ، أعني رقمًا لا يساوي نفسه أبدًا ، وهو دائمًا 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 يحصل العقار على عدد القراد الذي يمثل التاريخ والوقت.

10000 علامة هي مللي ثانية (10000000 علامة في الثانية).

يمكنك تجربة 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.now.timeofday.totalmilliseconds (لليوم الحالي) ، آمل أن يساعدك أيضًا.

يستخدم System.DateTime.Now.ToUniversalTime(). هذا يضع قراءتك بتنسيق ميلي ثانية معروف قائم على المرجع والذي يلغي تمامًا تغيير اليوم ، إلخ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top