[c#] ابحث عما إذا كان الوقت الحالي يقع في نطاق زمني


Answers

بعض الإجابات الجيدة هنا ولكن لا شيء يغطي حالة وقت البدء في يوم مختلف عن وقت الانتهاء. إذا كنت بحاجة إلى تجاوز حدود اليوم ، فقد يساعد شيء من هذا القبيل في:

TimeSpan start = TimeSpan.Parse("22:00"); // 10 PM
TimeSpan end = TimeSpan.Parse("02:00");   // 2 AM
TimeSpan now = DateTime.Now.TimeOfDay;

if (start <= end)
{
    // start and stop times are in the same day
    if (now >= start && now <= end)
    {
        // current time is between start and stop
    }
}
else
{
    // start and stop times are in different days
    if (now >= start || now <= end)
    {
       // current time is between start and stop
    }
}

لاحظ أنه في هذا المثال ، تكون الحدود الزمنية شاملة وأن هذا لا يزال يفترض أقل من فارق 24 ساعة بين start stop .

Question

باستخدام. NET 3.5

أريد تحديد ما إذا كان الوقت الحالي يقع في نطاق زمني.

حتى الآن لدي الحالي:

DateTime currentTime = new DateTime();
currentTime.TimeOfDay;

أنا أتطرق إلى كيفية الحصول على نطاق الوقت الذي تم تحويله ومقارنته. هل هذا العمل؟

if (Convert.ToDateTime("11:59") <= currentTime.TimeOfDay 
    && Convert.ToDateTime("13:01") >= currentTime.TimeOfDay)
{
   //match found
}

UPDATE1: شكرا للجميع على اقتراحاتكم. لم أكن على دراية وظيفة TimeSpan.




إرجاع خاصية TimeSpan قيمة TimeSpan .

جرب التعليمة البرمجية التالية:

TimeSpan time = DateTime.Now.TimeOfDay;

if (time > new TimeSpan(11, 59, 00)        //Hours, Minutes, Seconds
 && time < new TimeSpan(13, 01, 00)) {
    //match found
}

أيضاً ، new DateTime() هو نفسه DateTime.MinValue وسيظل دائماً يساوي 1/1/0001 12:00:00 AM . (لا يمكن أن تحتوي أنواع القيم على قيم افتراضية غير فارغة) تريد استخدام DateTime.Now .




باستخدام Linq يمكننا تبسيط هذا من خلال هذا

 Enumerable.Range(0, (int)(to - from).TotalHours + 1)
            .Select(i => from.AddHours(i)).Where(date => date.TimeOfDay >= new TimeSpan(8, 0, 0) && date.TimeOfDay <= new TimeSpan(18, 0, 0))






Links