현재 시간이 시간 범위에 속하는지 확인


147

.NET 3.5 사용

현재 시간이 시간 범위에 속하는지 확인하고 싶습니다.

지금까지 나는 currentime을 가지고있다 :

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

시간 범위를 변환하고 비교하는 방법을 비우고 있습니다. 이게 효과가 있을까요?

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

UPDATE1 : 제안 해 주셔서 감사합니다. TimeSpan 함수에 익숙하지 않았습니다.



3
자정을 건너는 데 관심이 있습니까?
gjutras

1
자정을 가로 지르는 것은 문제가되지 않지만 자정에 걸친 것은 내 프로그래밍 경험의 실패를 확신합니다 ...
John M

답변:


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

@ pmbiesiada : 이것은 원래 질문 (및 답변)의 범위를 완전히 벗어났습니다. 이 질문을 새로운 질문으로 만들어야하지만, 이와 같은 질문에 대해 이전에 답변을 받았다면 여기에서 설교를하십시오. 행운을 빕니다.
Frank Bollack

1
다른 날에 다른 시간이 있으면 어떻게합니까? 비교하기 쉬운가? stackoverflow.com/questions/22769557/…
SearchForKnowledge

@SearchForKnowledge : 무엇을 비교 하시겠습니까? 달성하고자하는 것에 대해 더 구체적으로 설명하거나 몇 가지 예를 제시하십시오.
Frank Bollack

4
아래 답변은 허용 된 것이어야합니다 ...이 답변은 며칠 동안 (예 : 22:00:00 ~ 02:00:00) TimeSpans를 확인하지 않습니다.
FranzHuber23

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 시간 차이보다 적은 가정합니다 startstop.


1
다른 날에 다른 시간이 있으면 어떻게합니까? 비교하기 쉬운가? stackoverflow.com/questions/22769557/…
SearchForKnowledge

좋은 지적입니다. 측정 된 시간이 자정을 지나면 이것이 정답 일 것입니다.
Sunsetquest

1
감사합니다, 몇 시간 후에 시도 11:57 pm하고 이것이 효과가 있습니다. TimeSpan time = new TimeSpan(23, 57, 00); DateTime date_with_time = mydate.Add(time);
shaijut

1
고마워 대답은 간단 해 보이지만 개념화하기는 다소 어색합니다.
Sam 나는 오전 11시

이것은 좋은 대답입니다. 주어진 시간이 DateTime지정된 업무 시간 내에 있는지 확인하는 방법을 작성 중 입니다. 업무 시간은 같은 날이 될 수도 있지만 이틀에 걸쳐있을 수도 있습니다 (예 : 오후 3시-오전 1시 운영 시간).
Drew

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

실제로 문자열을 TimeSpan으로 구문 분석하려면 다음을 사용할 수 있습니다.

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

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 비교를 생각하지 않았을 것입니다.
David

3
큰 코드 조각이지만 한 가지 문제가 있습니다. 동일한 시작 및 종료 시간을 지정하면 어떻게됩니까? 한 가지 가정은 24 시간 동안 지속되어야한다는 의미 일 수 있습니다. 즉, 점검 start <= end이 변경되어야 하는 조건을 의미 start < end하고 다른 가정은 같은 날에있을 수 있지만이 경우에는 실패 할 가능성이 높습니다 밀리 초를 포함하고 범위를 벗어남에 따라 Now.TimeOfDay를 사용합니다.
Thierry

@Thierry Nice catch :) 당신은 그것을 시도하고 고치기를 환영합니다.
André Snede Kock

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 # 라이브러리의 클래스가 아닙니다. 위 링크에서 다운로드 할 수있는 외부 클래스입니다.
Jpsy

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

매우 가깝습니다. 문제는 DateTime을 TimeOfDay와 비교하는 것입니다. 해야 할 일은 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");
        }

    }
 }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.