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



3 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.




باستخدام 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))



إرجاع خاصية 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 .







Related