احصل على الوقت بالمللي ثانية باستخدام C#
-
26-09-2019 - |
سؤال
أقوم بعمل برنامج أحتاج فيه للحصول على الوقت بالميلي ثانية. بحلول الوقت ، أعني رقمًا لا يساوي نفسه أبدًا ، وهو دائمًا 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()
. هذا يضع قراءتك بتنسيق ميلي ثانية معروف قائم على المرجع والذي يلغي تمامًا تغيير اليوم ، إلخ.