Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

94
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!