Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

92
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda