Usando .NET 3.5
Quiero determinar si la hora actual cae en un rango de tiempo.
Hasta ahora tengo el tiempo actual:
DateTime currentTime = new DateTime();
currentTime.TimeOfDay;
Estoy explicando cómo convertir y comparar el rango de tiempo. ¿Funcionaría esto?
if (Convert.ToDateTime("11:59") <= currentTime.TimeOfDay
&& Convert.ToDateTime("13:01") >= currentTime.TimeOfDay)
{
//match found
}
ACTUALIZACIÓN1: Gracias a todos por sus sugerencias. No estaba familiarizado con la función TimeSpan.
Respuestas:
Para verificar la hora del día, use:
Para tiempos absolutos use:
fuente
Algunas buenas respuestas aquí, pero ninguna cubren el caso de que su hora de inicio esté en un día diferente a su hora de finalización. Si necesita montar el límite del día, algo como esto puede ayudar:
Tenga en cuenta que en este ejemplo los límites de tiempo son inclusivos y que esto todavía supone una diferencia de menos de 24 horas entre
start
ystop
.fuente
11:57 pm
y esto funcionó:TimeSpan time = new TimeSpan(23, 57, 00); DateTime date_with_time = mydate.Add(time);
DateTime
cae dentro de las horas hábiles especificadas. El horario comercial podría ser el mismo día, pero también podría abarcar dos días (por ejemplo, 3pm - 1am horas de operación).si realmente desea analizar una cadena en un TimeSpan, puede usar:
fuente
11:57 pm
y esto funcionó:TimeSpan time = new TimeSpan(23, 57, 00); DateTime date_with_time = mydate.Add(time);
Una pequeña función de extensión simple para esto:
fuente
start <= end
deben cambiar los controlesstart < end
y otra suposición podría ser que es el mismo día, pero si este es el caso, es probable que falle si usa Now.TimeOfDay ya que incluye milisegundos y hace que esté fuera de rango.Intente usar el objeto TimeRange en C # para completar su objetivo.
Aquí es donde obtuve ese ejemplo de uso de TimeRange
fuente
La
TimeOfDay
propiedad devuelve unTimeSpan
valor.Prueba el siguiente código:
Además,
new DateTime()
es igualDateTime.MinValue
y siempre será igual a1/1/0001 12:00:00 AM
. (Los tipos de valor no pueden tener valores predeterminados no vacíos) que desee usarDateTime.Now
.fuente
Estás muy cerca, el problema es que estás comparando un DateTime con un TimeOfDay. Lo que debe hacer es agregar la propiedad .TimeOfDay al final de sus funciones Convert.ToDateTime ().
fuente
¿Será esto más sencillo para manejar el caso límite del día? :)
fuente
Usando Linq podemos simplificar esto con esto
fuente
fuente