Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

100
Visualizações
Comparando el objeto de intervalo de tiempo si está entre horas en C#

Quiero filtrar una matriz de objetos. El objetivo es filtrar los objetos entre dos objetos de intervalo de tiempo:

 TimeSpan tsFrom = TimeSpan.Parse("16:00"); TimeSpan tsTo = TimeSpan.Parse("00:59");

Por ejemplo, tengo este objeto:

 TimeSpan dateObject = TimeSpan.Parse("22:05:22");

El problema surge cuando trato de comparar si el objeto de fecha está entre tsFrom y tsTo:

 if (dateObject > tsFrom && dateObject < tsTo) { // do something .... }

Esto no funcionará para casos como ese. ¿Tienes alguna idea de cómo puedo hacer que esto funcione?

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Estás queriendo trabajar con horas del día. El tipo de datos TimeSpan funciona con intervalos de tiempo (algo obvio por decir). Estos son conceptos distintos .

Las horas del día son precisamente lo que motivó la creación del nuevo tipo TimeOnly en .NET 6. Tiene un método IsBetween :

Determina si un tiempo cae dentro del rango provisto. Admite rangos "normales", como 10:00-12:00, y rangos que abarcan la medianoche, como 23:00-01:00.

Tenga en cuenta que IsBetween usa la convención más sensata de inicio inclusivo, final exclusivo, lo que significa que usaría 01:00 como el momento final y no excluiría accidentalmente, por ejemplo 00:59:17 de su período


Para versiones anteriores, le sugiero que se dé cuenta de que si To es menor que From (por ejemplo, representa un período que cruza la medianoche), debe verificar:

 if ((tsTo > tsFrom && dateObject >= tsFrom && dateObject < tsTo) || (tsFrom > tsTo && (dateObject < tsTo || dateObject >= tsFrom))) { }

Tenga en cuenta, una vez más, que esta lógica supone un origen inclusivo y un From To (su lógica original trató ambos extremos como exclusivos, lo que rara vez es correcto)

over 4 years ago · Santiago Trujillo Relatório

0

El problema con este es que está tratando de usar el método timeSpan de manera incorrecta, si lo hice bien, está tratando de verificar si el tiempo de dateObject se encuentra entre tsFrom y tsTo, el problema es que está tratando de referir a un día diferente con el tsTo, algo que el intervalo de tiempo no puede manejar. Lo arreglé usando dateTime para especificar al menos el día desde el que se toma la hora, sugiero cambiar el código a esto

 string datevalue = @"15/03/2021 16:00:00"; DateTime start = DateTime.Parse(datevalue); datevalue = @"16/03/2021 00:59:00"; DateTime end = DateTime.Parse(datevalue); datevalue = @"15/03/2021 22:05:22"; DateTime obj = DateTime.Parse(datevalue); if (obj > start && obj < end) { //Do something }
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda