বর্তমান সময় একটি সময়সীমাতে আসে কিনা তা সন্ধান করুন


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
}

আপডেট 1: আপনার পরামর্শের জন্য সবাইকে ধন্যবাদ। আমি টাইমস্প্যান ফাংশনটির সাথে পরিচিত ছিলাম না।



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
}

ম্যাচের সংখ্যা কীভাবে গুনবেন? উদাহরণস্বরূপ আমি গণনা করতে চাই যে কত শনিবার এবং রবিবার রয়েছে।
pbies

@ পিএমবিএসিয়াদা: এটি মূল প্রশ্নের (এবং উত্তর) ক্ষেত্রের বাইরে পুরোপুরি। আপনার এটি একটি নতুন প্রশ্ন করা উচিত, তবে এর আগে যদি এর আগে কোনও উত্তর দেওয়া থাকে তবে এসও তে এখানে একটি সের্যাচ করুন। শুভকামনা।
ফ্রাঙ্ক বোলাক 15

1
বিভিন্ন দিনের জন্য আলাদা আলাদা সময় থাকলে কী হবে? এর তুলনা করা কি সহজ? stackoverflow.com/questions/22769557/...
SearchForKnowledge

@ সন্ধান ফরকনজল: কি জন্য তুলনা? আপনি কী অর্জন করতে চান তার সম্পর্কে আরও সুনির্দিষ্ট হন বা কিছু উদাহরণ দিতে পারেন।
ফ্রাঙ্ক বল্ল্যাক

4
নীচের উত্তরটি অবশ্যই গ্রহণযোগ্য হওয়া উচিত ... এটি কয়েক দিনের মধ্যে টাইমস্প্যানগুলির জন্য পরীক্ষা করে না, যেমন 22:00:00 থেকে 02:00:00 পর্যন্ত ...
ফ্র্যান্জহুবার 23

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

নোট যে এই উদাহরণে সময় গণ্ডি সমেত এবং এই এখনও মধ্যে একটি 24-ঘন্টা পার্থক্য কম ধরে নেয় যে startএবং 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);
শাইজুট

1
এটার জন্য ধন্যবাদ. উত্তরটি আসাটা সহজ বলে মনে হচ্ছে, তবে ধারণাটি ধারণ করার পক্ষে এটি বিশ্রীকর।
স্যাম আমি বলছি পুনরায় ইনস্টল করুন মনিকা

এটি একটি দুর্দান্ত উত্তর। আমি প্রদত্ত সময় DateTimeনির্দিষ্ট ব্যবসায়িক সময়ের মধ্যে পড়ে কিনা তা নির্ধারণ করার জন্য একটি পদ্ধতি লিখছি । ব্যবসায়ের সময়গুলি একই দিনে হতে পারে তবে এগুলি দুটি দিনও ছড়িয়ে থাকতে পারে (উদাঃ, বিকাল ৩ টা - 1 টা অপারেটিং ঘন্টা)।
ড্র 3

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);
শাইজুট

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
আড্রে ভাল সংযোজন। বিভিন্ন দিনের ক্ষেত্রে কোনও ওআর তুলনা করার কথা ভাবেননি।
ডেভিড

3
কোডের দুর্দান্ত ছোট্ট টুকরো তবে এটির মধ্যে একটি সমস্যা। আপনি যদি একই শুরু এবং শেষ সময় নির্দিষ্ট করে থাকেন। একটি অনুমান হ'ল, এর অর্থ এটি হতে পারে যে এটি 24 ঘন্টা সময়কালের মধ্যে বিস্তৃত হওয়া উচিত যার অর্থ আপনার শর্ত যা চেকগুলিতে start <= endপরিবর্তন করা উচিত start < endএবং অন্য ধারণাটি একই দিনে হতে পারে তবে যদি এটি হয় তবে সম্ভবত এটি ব্যর্থ হবে আপনি Now.TimeOfDay ব্যবহার করুন কারণ এতে মিলিসেকেন্ড রয়েছে এবং এটি সীমার বাইরে চলেছে।
থিয়েরি

@ থিরি নিস ক্যাচ :) চেষ্টা করে এটি ঠিক করার জন্য আপনাকে স্বাগতম।
আন্দ্রে সান্দে কক

14

আপনার লক্ষ্যটি সম্পূর্ণ করতে সি # তে টাইমরেঞ্জ অবজেক্টটি ব্যবহার করার চেষ্টা করুন।

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

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

এখানেই আমি টাইমরেঞ্জ ব্যবহারের সেই উদাহরণটি পেয়েছি


12
টাইমরেঞ্জ কোনও সি # লাইব্রেরির ক্লাস নয়। এটি একটি বাহ্যিক শ্রেণি যা উপরের লিঙ্কে ডাউনলোড করা যায়।
জেপিসি

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

আপনি খুব কাছাকাছি, সমস্যাটি হ'ল আপনি একটি ডেটটাইমকে একটি টাইমঅফডয়ের সাথে তুলনা করছেন। আপনাকে যা করতে হবে তা হল আপনার রূপান্তর. টোডেটটাইম () ফাংশনগুলির শেষে .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

লিনক ব্যবহার করে আমরা এটির মাধ্যমে এটি সহজ করতে পারি

 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");
        }

    }
 }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.