पता करें कि क्या वर्तमान समय एक समय सीमा में आता है


147

.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: आपके सुझावों के लिए सभी को धन्यवाद। मैं टाइमस्पैन फ़ंक्शन से परिचित नहीं था।



3
क्या आपको आधी रात को पार करने से संबंधित होना चाहिए?
gjutras

1
आधी रात को पार करना कोई चिंता की बात नहीं है, लेकिन आधी रात तक जो कुछ भी होता है वह निश्चित रूप से मेरे प्रोग्रामिंग अनुभव का एक हिस्सा है ...
जॉन एम

जवाबों:


258

दिन के उपयोग के समय की जाँच के लिए:

TimeSpan start = new TimeSpan(10, 0, 0); //10 o'clock
TimeSpan end = new TimeSpan(12, 0, 0); //12 o'clock
TimeSpan now = DateTime.Now.TimeOfDay;

if ((now > start) && (now < end))
{
   //match found
}

पूर्ण समय के उपयोग के लिए:

DateTime start = new DateTime(2009, 12, 9, 10, 0, 0)); //10 o'clock
DateTime end = new DateTime(2009, 12, 10, 12, 0, 0)); //12 o'clock
DateTime now = DateTime.Now;

if ((now > start) && (now < end))
{
   //match found
}

मैचों की संख्या की गणना कैसे करें? उदाहरण के लिए मैं गिनना चाहता हूं कि कितने शनिवार और रविवार सीमा में हैं।
पैरिस

@pmbiesiada: यह मूल प्रश्न (और उत्तर) के दायरे से पूरी तरह बाहर है। आपको इसे एक नया प्रश्न बनाना चाहिए, लेकिन एसओ पर यहां एक सेरैक करें यदि ऐसा कुछ पहले उत्तर दिया गया हो। सौभाग्य।
फ्रैंक बोलैक

1
क्या होगा अगर अलग-अलग दिनों के लिए अलग-अलग समय हो? क्या इसकी तुलना करना आसान है? stackoverflow.com/questions/22769557/…
SearchForKnowledge

@SearchForKnowledge: किस लिए तुलना करें? कृपया इस बारे में अधिक विशिष्ट रहें कि आप क्या करना चाहते हैं या कुछ उदाहरण देना चाहते हैं।
फ्रैंक बोलैक

4
नीचे दिए गए उत्तर को स्वीकार किया जाना चाहिए ... यह एक दिन के लिए समय-समय पर जांच नहीं करता है, उदाहरण के लिए
22:00:00

117

यहाँ कुछ अच्छे उत्तर हैं लेकिन आपके प्रारंभ समय के मामले को आपके अंतिम समय की तुलना में एक अलग दिन में शामिल नहीं किया गया है। यदि आपको दिन की सीमा को पूरा करने की आवश्यकता है, तो कुछ इस तरह से मदद मिल सकती है:

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
    }
}

ध्यान दें कि इस उदाहरण में समय सीमाएँ सम्मिलित हैं और यह अभी भी startऔर के बीच 24-घंटे के अंतर से कम मानती है stop


1
क्या होगा अगर अलग-अलग दिनों के लिए अलग-अलग समय हो? क्या इसकी तुलना करना आसान है? stackoverflow.com/questions/22769557/…
SearchForKnowledge

अच्छी बात है, यह समझ में आता है। यदि मापा समय आधी रात को गुजरता है तो यह एकमात्र उत्तर होगा जो अभी भी सही होगा।
सूर्यास्तक्वेस्ट

1
धन्यवाद, घंटे के बाद मैं के लिए कोशिश की 11:57 pmऔर यह काम किया: TimeSpan time = new TimeSpan(23, 57, 00); DateTime date_with_time = mydate.Add(time);
8

1
उसके लिये आपका धन्यवाद। इसका उत्तर सरल प्रतीत होता है, लेकिन यह अवधारणा के लिए अजीब है।
सैम मैं कह रहा हूं मोनिका

यह एक बेहतरीन जवाब है। मैं यह निर्धारित करने के लिए एक विधि लिख रहा हूं कि किसी दिए गए समय का समय DateTimeनिर्दिष्ट व्यावसायिक घंटों के भीतर है या नहीं। व्यवसाय के घंटे एक ही दिन हो सकते हैं, लेकिन वे दो दिन (जैसे, दोपहर 3 बजे - 1 बजे संचालन घंटे) भी कर सकते हैं।
ड्रू

17
if (new TimeSpan(11,59,0) <= currentTime.TimeOfDay && new TimeSpan(13,01,0) >=  currentTime.TimeOfDay)
{
   //match found
}

यदि आप वास्तव में टाइमस्पैन में एक स्ट्रिंग पार्स करना चाहते हैं, तो आप उपयोग कर सकते हैं:

    TimeSpan start = TimeSpan.Parse("11:59");
    TimeSpan end = TimeSpan.Parse("13:01");

धन्यवाद, घंटे के बाद मैं के लिए कोशिश की 11:57 pmऔर यह काम किया: TimeSpan time = new TimeSpan(23, 57, 00); DateTime date_with_time = mydate.Add(time);
8

16

इसके लिए एक साधारण सा विस्तार कार्य:

public static bool IsBetween(this DateTime now, TimeSpan start, TimeSpan end)
{
    var time = now.TimeOfDay;
    // If the start time and the end time is in the same day.
    if (start <= end)
        return time >= start && time <= end;
    // The start time and end time is on different days.
    return time >= start || time <= end;
}

3
इसके अलावा आंद्रे। अलग-अलग दिन के मामले के लिए एक OR तुलना करने के लिए नहीं सोचा होगा।
डेविड

3
कोड के महान छोटे टुकड़े लेकिन इसके साथ एक समस्या है। क्या होगा यदि आप एक ही शुरुआत और समाप्ति समय निर्दिष्ट करते हैं। एक धारणा यह है कि, इसका मतलब यह हो सकता है कि यह 24 घंटे की अवधि में होना चाहिए, जिसका अर्थ है कि आपकी स्थिति जो चेक में start <= endबदलनी चाहिए start < endऔर एक और धारणा यह हो सकती है कि यह उसी दिन है, लेकिन अगर यह मामला है, तो यह संभवतः विफल हो जाएगा यदि आप Now.TimeOfDay का उपयोग करते हैं क्योंकि इसमें मिलीसेकंड और सीमा से बाहर होने का कारण होता है।
थियरी

@ थिएरी नाइस कैच :) आपका प्रयास और इसे ठीक करने के लिए स्वागत है।
आंद्रे स्नेड कोक

14

अपना लक्ष्य पूरा करने के लिए C # में TimeRange ऑब्जेक्ट का उपयोग करने का प्रयास करें।

TimeRange timeRange = new TimeRange();
timeRange = TimeRange.Parse("13:00-14:00");

bool IsNowInTheRange = timeRange.IsIn(DateTime.Now.TimeOfDay);
Console.Write(IsNowInTheRange);

यहाँ है जहाँ मुझे TimeRange का उपयोग करने का वह उदाहरण मिला


12
TimeRange किसी C # लाइब्रेरी से क्लास नहीं है। यह एक बाहरी वर्ग है जिसे ऊपर दिए गए लिंक पर डाउनलोड किया जा सकता है।
जेप्सी

6

TimeOfDayसंपत्ति एक रिटर्न 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


2

आप बहुत करीब हैं, समस्या यह है कि आप डेटाइम की तुलना टाइमऑफडे से कर रहे हैं। आपको क्या करना है। अपने Convert.ToDateTime () फ़ंक्शन के अंत में .TimeOfDay गुण जोड़ें।


2

क्या यह दिन सीमा मामले को संभालने के लिए सरल होगा? :)

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

bool bMatched = now.TimeOfDay >= start.TimeOfDay &&
                now.TimeOfDay < end.TimeOfDay;
// Handle the boundary case of switching the day across mid-night
if (end < start)
    bMatched = !bMatched;

if(bMatched)
{
    // match found, current time is between start and end
}
else
{
    // otherwise ... 
}

0

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))

0
 using System;

 public class Program
 {
    public static void Main()
    {
        TimeSpan t=new TimeSpan(20,00,00);//Time to check

        TimeSpan start = new TimeSpan(20, 0, 0); //8 o'clock evening

        TimeSpan end = new TimeSpan(08, 0, 0); //8 o'clock Morning

        if ((start>=end && (t<end ||t>=start))||(start<end && (t>=start && t<end)))
        {
           Console.WriteLine("Mached");
        }
        else
        {
            Console.WriteLine("Not Mached");
        }

    }
 }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.