locked
Trabajar con Horas RRS feed

  • 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

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. Blog
    viernes, 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

    Quartz.NET

    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
    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. Blog
    viernes, 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).aspx

    http://msdn.microsoft.com/es-es/library/d56de412.aspx

     

    saludos

     

     


    Liebling Schacmann
    viernes, 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
    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
    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

     

    Quartz.NET

    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
    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