كيف تحسب الوقت التراكمي في C#؟
سؤال
أريد حساب الفترة الزمنية بين مرتين والتي قمت بحفظها في قاعدة البيانات.لذلك أريد حرفيًا أن أعرف طول الفترة الزمنية بين القيمتين.
14:10:20 - 10:05:15 = 02:05:05
وبالتالي ستكون النتيجة 02:05:05.
كيف يمكنني تحقيق ذلك باستخدام C#؟
14:10:20 هو التنسيق الذي حفظته به في قاعدة البيانات الخاصة بي.
المحلول
اقرأ قيمتي الوقت في متغيرات TimeSpan، ثم قم بإجراء .Subtract()
على متغير TimeSpan الأكبر للحصول على نتيجة TimeSpan.
على سبيل المثال TimeSpan difference = t1.Subtract(t2);
.
نصائح أخرى
ستكون خطوتك الأولى هي الحصول على القيم الزمنية المخزنة في قاعدة البيانات الخاصة بك في .NET DateTime
الهياكل.
إذا قمت بتخزينها كقيم SQL-DateTime في قاعدة البيانات، فيمكنك الحصول عليها مباشرةً بتنسيق DateTime
.سيبدو شيء هكذا:
SQLCommand getTimeCommand = new SQLCommand("SELECT time FROM table", dbConnection);
SQLDataReader myReader = getTimeCommand.ExecuteReader();
while (myReader.Read())
{
DateTime time = myReader.GetDateTime(0);
}
myReader.Close();
قد يختلف التنفيذ الخاص بك، راجع وثائق ADO.NET في مكتبة MSDN.
إذا كان لديك بالفعل سلسلة تمثل الوقت، فيمكنك تحليل السلسلة إلى ملف DateTime
باستخدام الأساليب الثابتة
DateTime.Parse
أو
DateTime.ParseExact
في حالتك قد تحتاج إلى استخدام ParseExact
, ، والتي يمكن تزويدها بسلسلة تنسيق تحدد كيفية قراءة السلسلة.يجب العثور على أمثلة في مكتبة MSDN.
يتم تخزين المدد الزمنية في .NET داخل ملف TimeSpan
البنية.يعد الحصول على الوقت المنقضي بين أوقات التاريخ أمرًا سهلاً:
DateTime time1, time2; //filled with your timevalues from the db
TimeSpan elapsed = d2 - d1;
elapsed
يحتوي الآن على الفترة الزمنية بين الاثنين DateTimes
.هناك العديد من الأعضاء للبنية للوصول إلى TimeSpan
.ابحث في مكتبة MSDN للعثور على ما تحتاجه.
تدعم كائنات DateTime عامل التشغيل "-" حتى تتمكن من قراءة أوقاتك في هذه الكائنات وطرحها.للاختبار، تحقق من هذا:
DateTime then = DateTime.Now;
Thread.Sleep(500);
DateTime now = DateTime.Now;
TimeSpan time = now - then;
MessageBox.Show(time.ToString());