Usando o .NET 3.5
Quero determinar se o horário atual cai em um intervalo de tempo.
Até agora eu tenho o tempo atual:
DateTime currentTime = new DateTime();
currentTime.TimeOfDay;
Estou pensando em como obter o intervalo de tempo convertido e comparado. Isso funcionaria?
if (Convert.ToDateTime("11:59") <= currentTime.TimeOfDay
&& Convert.ToDateTime("13:01") >= currentTime.TimeOfDay)
{
//match found
}
UPDATE1: Obrigado a todos por suas sugestões. Eu não estava familiarizado com a função TimeSpan.
Respostas:
Para verificar uma hora do dia, use:
Para tempos absolutos, use:
fonte
Algumas boas respostas aqui, mas nenhuma abordam o caso do horário de início em um dia diferente do horário de término. Se você precisar ultrapassar o limite do dia, algo como isso pode ajudar:
Observe que, neste exemplo, os limites de tempo são inclusivos e que isso ainda assume menos de uma diferença de 24 horas entre
start
estop
.fonte
11:57 pm
e funcionou:TimeSpan time = new TimeSpan(23, 57, 00); DateTime date_with_time = mydate.Add(time);
DateTime
está dentro do horário comercial especificado. O horário comercial pode ser no mesmo dia, mas também pode durar dois dias (por exemplo, das 15:00 às 01:00 horas de operação).se você realmente deseja analisar uma string em um TimeSpan, pode usar:
fonte
11:57 pm
e funcionou:TimeSpan time = new TimeSpan(23, 57, 00); DateTime date_with_time = mydate.Add(time);
Uma pequena função de extensão simples para isso:
fonte
start <= end
deve ser alterada nas verificaçõesstart < end
e outra suposição pode ser que seja no mesmo dia, mas se for esse o caso, provavelmente falhará se você usa o Now.TimeOfDay, pois inclui milissegundos e faz com que fique fora do intervalo.Tente usar o objeto TimeRange em C # para concluir seu objetivo.
Aqui é onde eu peguei esse exemplo de uso do TimeRange
fonte
A
TimeOfDay
propriedade retorna umTimeSpan
valor.Tente o seguinte código:
Além disso,
new DateTime()
é o mesmo queDateTime.MinValue
e sempre será igual a1/1/0001 12:00:00 AM
. (Os tipos de valor não podem ter valores padrão não vazios). Você deseja usarDateTime.Now
.fonte
Você está muito perto, o problema é que você está comparando um DateTime com um TimeOfDay. O que você precisa fazer é adicionar a propriedade .TimeOfDay ao final das suas funções Convert.ToDateTime ().
fonte
Isso será mais simples para lidar com o caso de limite de dias? :)
fonte
Usando o Linq, podemos simplificar isso dessa maneira
fonte
fonte