Principales respuestas
Trabajar con Horas

Pregunta
-
Amigos como estan, queria ver si me ayudan con algo, debo hacer un programa que se ejecute en un rango de horas, es decir este programa se ejecutara de lunes a viernes de 6am a 8am, entonces en la base de datos tengo el dia y la horade inicio y hora final del proceso.
Desde un formulario obtengo el registro con la informacion de la hora inicio y fin, pero al momento de asignar an control de tipo datetimepicker, para mostrar las horas de inicio y fin, me da error indicandome que la fecha no es valida.
El campo de la base de datos es de tipo Time, y le asigno a una variable de tipo TimeSpan.
Mi consulta es :
1. Como se deberia asignar el valor de la hora al control, o cual seria la forma correcta de hacerlo.
2. Para el proceso automatico al pulsar el boton le ejecuto el proceso y cada 5 minutos con un timer verifico que este en el rango de horas y si no es asi lo canelo, esta bien esa forma de hacerlo, es la mejor??
Saludos y gracias por la ayuda que puedan brindarme
- Editado Fsigu viernes, 4 de febrero de 2011 14:25 me equivoque el titulo
viernes, 4 de febrero de 2011 14:25
Respuestas
-
ahh pero entonces no tenias solo la hora en la table era la hora mas el dia
lo que veo raro es que se guarde el 01/01/0001, por ahi deberias quitar esta
podrias usar
DateTime fecha = Convert.ToDateTime(fila["horainicio"].ToString());
dtpHoraInicio.Value = Convert.ToDateTime(fecha.ToString("hh:mm tt"));
de esta forma eliminarias de la fecha que recuperas de la db la parte del 01/01/0001
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina- Propuesto como respuesta Juan Carlos Ruiz PachecoMicrosoft employee, Moderator lunes, 7 de febrero de 2011 16:55
- Marcado como respuesta Eduardo PorteschellerModerator martes, 8 de febrero de 2011 14:01
viernes, 4 de febrero de 2011 16:52 -
hola
1-
como estas asignando el valor al DateTimePicker ?
recuerda que es un DateTime el qeu debes aisgnar, si tiene solo la hora podrias complciarse
podrias usa
DateTimePicker1.Value = Convert.ToDateTime("8:00 AM");
2-
para no validar cada tiempo podrias ewn un servici de Windows usar una libreria de scheduler
A New Task Scheduler Class Library for .NET
esta librerias las configurarias al inicio del servicio y sola al ejecutarse una accion realziarias la tarea
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina- Marcado como respuesta Eduardo PorteschellerModerator martes, 8 de febrero de 2011 14:01
viernes, 4 de febrero de 2011 14:48 -
Ahora como haria para mostrar el formato de hora por ejemplo si es las 7pm en 19:00
si tienes un objeto datetime
podrias aplcair el formato
txtHota.Text = dtpHoraInicio.Value.ToString("HH:mm tt");
con el HH pondrias la hora en formato 24
Custom Date and Time Format Strings
tengo tipo de dato, time, date, y timespan, entonces cual de estos es el mejor para almacenar las horas
ahh era postgre la base de datos, con razon me parecia raro el tipo de dato que mencionabas, porque en sql serve esto no lo tienes
particularmente usaria el date, pero el date con fecha y hora, entonces guarda directo esto la fecha y la hora, solo que despues solo trabajas con uan aprte de la misma, o sea mostrando solo la hora, pero guardas simpre todos junto
esto lo puede hacer porque tienes formatos que aplciar a la fecha
de esta forma lo trabajas con sql server
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina- Propuesto como respuesta Juan Carlos Ruiz PachecoMicrosoft employee, Moderator lunes, 7 de febrero de 2011 16:55
- Marcado como respuesta Eduardo PorteschellerModerator martes, 8 de febrero de 2011 14:01
viernes, 4 de febrero de 2011 17:28 -
hola
para el armado del servicio de windows
Create Windows Service in Visual Studio
Creating a Basic Windows Service in C#
Como crear un Servicio de Windows con Visual Studio 2008
y para el tema de realziar tareasrecomendaria usar una libreria de scheduler
A New Task Scheduler Class Library for .NET
la cual confiras en el start del servicio
tambien podrias lograrlo si usar Thread
Using Task Scheduler or Windows Service For Scheduled Tasks
usarias el Sleep del thread para schedulear
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina- Propuesto como respuesta Juan Carlos Ruiz PachecoMicrosoft employee, Moderator lunes, 7 de febrero de 2011 16:55
- Marcado como respuesta Eduardo PorteschellerModerator martes, 8 de febrero de 2011 14:01
viernes, 4 de febrero de 2011 18:02
Todas las respuestas
-
Saludos,
haber si entendi,, quieres que el programa se ejecute a una hora especifica , para ejecutar una determinada accion?
podrias hacer un Windows Services para esto..
para asignar el rango de hora, me imagino que tiene dos horas , para hacerlo facil a cada contro datetime picker pones el formato en horas
y haces esto picker .value = new DateTime(anos,mes,dia,TIMESPAN);
y me parece que la forma en que lo haces esta bien...
Live like you'll die tomorrow, learn like you'll live forever. Blogviernes, 4 de febrero de 2011 14:36 -
hola
1-
como estas asignando el valor al DateTimePicker ?
recuerda que es un DateTime el qeu debes aisgnar, si tiene solo la hora podrias complciarse
podrias usa
DateTimePicker1.Value = Convert.ToDateTime("8:00 AM");
2-
para no validar cada tiempo podrias ewn un servici de Windows usar una libreria de scheduler
A New Task Scheduler Class Library for .NET
esta librerias las configurarias al inicio del servicio y sola al ejecutarse una accion realziarias la tarea
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina- Marcado como respuesta Eduardo PorteschellerModerator martes, 8 de febrero de 2011 14:01
viernes, 4 de febrero de 2011 14:48 -
Gracias amigos por las respuestas, pero en mi base de datos tengo el campo de tipo time, y esta por ejemplo 6:00.
CUando le traigo esta informacion a un datatable, y quiero este valor asignarle a un control datetimepicker,
dtpHoraInicio.Value=Convert.ToDateTime(fila["horainicio"]);
pero veo que en el campo horainicio del datatable tiene este valor: "01/01/0001 6:00:00"
y al asignarle me sale este mensaje El valor "01/01/0001 6:00:00", no es valido para Value. debe estar entre Mindate y Maxdate.
Y no se como hacerlo.
Con lo segundo, voy abuscar algo mas de informacion de un servicio windows, para ver como lo hago ejecutar desde c#, lo que quiero mas que nada es que este proceso revise si la hora actual esta entre las 6am y las 8am, y cuando salga de este horario me borre algunos archivos que genere en un directorio en particular.
Saludos
viernes, 4 de febrero de 2011 16:01 -
Como te mencione puedes hacer esto
picker.value = new Date(2011,01,01,tuTimeSpan),,, los valores de la fecha los puedes cambiar para que siempre sean el actual (lo que importa poco , ya que vas a trabajar con las horas)
Live like you'll die tomorrow, learn like you'll live forever. Blogviernes, 4 de febrero de 2011 16:10 -
Gracias gregory por la respuesta, pero justamenre eso, en mi datarow, en la columna horainicio, tengo este valor "01/01/0001 6:00:00".
Como tomaria solo la hora de ese campo?.
Y porfa no se si saben de algun enlace en español para lo de los servicios windows? No soy muy bueno en el ingles
viernes, 4 de febrero de 2011 16:31 -
lo q debes hacer es :
DateTime dtInicio = Convert.ToDateTime(fila["horainicio"]);
DateTime dtAux = DateTime.MinDate;
dtAux = dtAux.AddHours(dtInicio.Hour);
dtAux = dtAux.AddMinutes(dtInicio.Minute);
picker.value = dtAux;
de esta forma no deberia salir error
___
sobre los serviciios windows revisa los siguientes enlaces
http://msdn.microsoft.com/es-es/library/9k985bc9(VS.80).aspxhttp://msdn.microsoft.com/es-es/library/d56de412.aspx
saludos
Liebling Schacmannviernes, 4 de febrero de 2011 16:52 -
ahh pero entonces no tenias solo la hora en la table era la hora mas el dia
lo que veo raro es que se guarde el 01/01/0001, por ahi deberias quitar esta
podrias usar
DateTime fecha = Convert.ToDateTime(fila["horainicio"].ToString());
dtpHoraInicio.Value = Convert.ToDateTime(fecha.ToString("hh:mm tt"));
de esta forma eliminarias de la fecha que recuperas de la db la parte del 01/01/0001
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina- Propuesto como respuesta Juan Carlos Ruiz PachecoMicrosoft employee, Moderator lunes, 7 de febrero de 2011 16:55
- Marcado como respuesta Eduardo PorteschellerModerator martes, 8 de febrero de 2011 14:01
viernes, 4 de febrero de 2011 16:52 -
Gracias Leandro funciono bien, pero te comento en la tabla solo tengo la hora, el campo en la tabla es de tipo time, y no se porque cuando lo recupero me da con esa fecha.
Ahora como haria para mostrar el formato de hora por ejemplo si es las 7pm en 19:00
Una ultima consulta en la base de datos que trabajo postgre, tengo tipo de dato, time, date, y timespan, entonces cual de estos es el mejor para almacenar las horas
viernes, 4 de febrero de 2011 17:16 -
Ahora como haria para mostrar el formato de hora por ejemplo si es las 7pm en 19:00
si tienes un objeto datetime
podrias aplcair el formato
txtHota.Text = dtpHoraInicio.Value.ToString("HH:mm tt");
con el HH pondrias la hora en formato 24
Custom Date and Time Format Strings
tengo tipo de dato, time, date, y timespan, entonces cual de estos es el mejor para almacenar las horas
ahh era postgre la base de datos, con razon me parecia raro el tipo de dato que mencionabas, porque en sql serve esto no lo tienes
particularmente usaria el date, pero el date con fecha y hora, entonces guarda directo esto la fecha y la hora, solo que despues solo trabajas con uan aprte de la misma, o sea mostrando solo la hora, pero guardas simpre todos junto
esto lo puede hacer porque tienes formatos que aplciar a la fecha
de esta forma lo trabajas con sql server
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina- Propuesto como respuesta Juan Carlos Ruiz PachecoMicrosoft employee, Moderator lunes, 7 de febrero de 2011 16:55
- Marcado como respuesta Eduardo PorteschellerModerator martes, 8 de febrero de 2011 14:01
viernes, 4 de febrero de 2011 17:28 -
Gracias Leandro me ha servidor de mucho, ahora si no es muho pedir no tienes por ahi algun ejemplo pequeño armado sobre los servicios windows para poder ejecutar el proceso automatico
viernes, 4 de febrero de 2011 17:42 -
hola
para el armado del servicio de windows
Create Windows Service in Visual Studio
Creating a Basic Windows Service in C#
Como crear un Servicio de Windows con Visual Studio 2008
y para el tema de realziar tareasrecomendaria usar una libreria de scheduler
A New Task Scheduler Class Library for .NET
la cual confiras en el start del servicio
tambien podrias lograrlo si usar Thread
Using Task Scheduler or Windows Service For Scheduled Tasks
usarias el Sleep del thread para schedulear
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina- Propuesto como respuesta Juan Carlos Ruiz PachecoMicrosoft employee, Moderator lunes, 7 de febrero de 2011 16:55
- Marcado como respuesta Eduardo PorteschellerModerator martes, 8 de febrero de 2011 14:01
viernes, 4 de febrero de 2011 18:02 -
Hola Leandro,
Yo estoy haciendo un servicio de windows y para realizar la ejecución a cierta hora tengo el siguinte codigo:
TimeSpan Ahora = TimeSpan.Parse(DateTime.Now.ToString("hh:mm")); int retorno = HorasEjecucion.BinarySearch(Ahora); if (retorno >= 0 && !enEjecucion) { enEjecucion = true; Conexion.ConexionAD conectarAD = new Conexion.ConexionAD(); conectarAD.ADconexion(); enEjecucion = false; }
pero al estar debugeando el código por un determinado tiempo me saca del debug y no me envía ningun error, me podrias ayudar?, de antemano gracias.DJDirac les desea felices bits.
- Propuesto como respuesta DJdirac jueves, 20 de diciembre de 2012 21:45
jueves, 20 de diciembre de 2012 21:43