rico qué que puerto mexico marruecos hora españa colombia casablanca arizona argentina ahora c# datetime

c# - qué - que hora es en puerto rico ahora



¿Cómo puedo verificar si la hora actual está en un período de tiempo? (5)

Tengo un servicio que el usuario puede configurar para que se ejecute durante las horas "no pico". Tienen la capacidad de establecer el período de tiempo que el servicio puede ejecutar.

Por ejemplo:

El usuario A trabaja de 8 am a 5 pm, por lo que desea programar la aplicación para que se ejecute entre las 5:30 pm y las 7:30 am.

El usuario B trabaja de 9 pm a 6 am, así que programan la aplicación para que se ejecute entre las 6:30 am y las 8:30 pm.

El punto es que la aplicación usa su computadora mientras que no lo están.

Dado un DateTime de la hora actual, un DateTime del inicio y un DateTime del tiempo de parada, ¿cómo puedo verificar si la corriente está entre el inicio y la parada?

La parte difícil para mí es que el tiempo puede cruzar el límite de la medianoche.


Por lo tanto, asumo de la pregunta que desea saber si se le da una hora de inicio y una hora de finalización de un día (sin incluir la fecha real, es decir, 1/1/1900 o algo así) para ver si hay otra hora con la hora Especificado por inicio y final. Por ejemplo, si el inicio es 9pm y el final es 9am, acepte 10pm pero rechace 10am.

Puede hacerlo por tipos de rango de tiempo (los tiempos son iguales, el final es después del inicio, el final es antes del inicio), lo cual es simple:

if (end==start) return true else if (end>start) return start<=time && time<=end else return !(time>end && time<start)

O puede ampliar el rango de inicio y final de tal manera que el final sea siempre después del inicio como tal:

if (end<=start) end += <24 hours> if (time<start) time+= <24 hours> return time<=end


Supongo que está guardando las horas de inicio y finalización en el archivo de configuración de las aplicaciones, por lo que básicamente todo lo que tiene que hacer es hacer que su aplicación establezca un indicador en "on" cuando se produce la "hora de inicio" y en "off" cuando se produce el tiempo de parada.

De esa manera, no tiene que estar comprobando constantemente si "ahora" es "entre el inicio y el final".


if (current> = start && current <= stop)

(o sin =)

Creo que eso es todo lo que necesitas?

El límite de la medianoche es una pista falsa: todo lo que necesita saber es el estado de ambas comparaciones.

Si haces cosas como manejar los fines de semana de manera diferente, entonces tienes otra lógica, pero la comparación básica es simple.


Si startTime y endTime representan un único intervalo de tiempo (solo ocurrirá una vez, y startTime y endTime representan la fecha y la hora de inicio / parada), entonces es tan fácil como decir

bool isTimeBetween = someTime >= startTime && someTime <= endTime;

Si es un evento recurrente (ocurre todos los días, durante algún intervalo), puede hacer comparaciones usando la propiedad TimeOfDay . (El caso recurrente es aquel en el que hay que considerar un inicio / parada que cruza la medianoche)

static public bool IsTimeOfDayBetween(DateTime time, TimeSpan startTime, TimeSpan endTime) { if (endTime == startTime) { return true; } else if (endTime < startTime) { return time.TimeOfDay <= endTime || time.TimeOfDay >= startTime; } else { return time.TimeOfDay >= startTime && time.TimeOfDay <= endTime; } }

(Nota: este código asume que si start == end , entonces cubre todas las veces. Hiciste un comentario a este efecto en otra publicación)

Por ejemplo, para verificar si es entre las 5 AM y las 9:30 PM

IsTimeOfDayBetween(someTime, new TimeSpan(5, 0, 0), new TimeSpan(21, 30, 0))

Si startTime y endTime son DateTime s, podría decir

IsTimeOfDayBetween(someTime, startTime.TimeOfDay, endTime.TimeOfDay)


DateTime t1; t1 = DateTime.Now; // loop inbetween start and end time if (t1>=start_time &&t1<=end_time) { //your code / action } //if you are using sql to get values start_time = Convert.ToDateTime(row.Cells[10].Text); end_time = Convert.ToDateTime(row.Cells[11].Text); //convert them to string or you will get some error!!!