|
Página 1 de 2
|
Operacion Entre Horas Con DateAdd
Autor |
Mensaje |
inforpalma
Usuario
Registrado: Junio 2017
Mensajes: 15
Edad: 61
|
Operacion Entre Horas Con DateAdd
Hola amigos.
Tras repasar los posibles temas en este excelente foro buscando una posible solución a mi problema, me decido a escribiros por si alguien pudiera ayudarme.
Os explico :
Tengo una aplicacion que una de las cosas que realiza es la adición de un valor de tiempo a una hora determinada.
Es decir, una variable reg_temp (valor de la hora actual refrescandose en continuo), una variable reg_temp_ini (valor que congela dicha hora en un momento dado) y variable reg_temp_fin (variable que contiene la suma de reg_temp_ini mas un espacio de tiempo).
Es decir, pongamos que mi hora actual es 18:00 (reg_temp) y le añado 15 minutos con lo que se convierte en 18:15 (reg_temp_fin).
El proceso se realiza correctamente mediante esta sentencia :
reg_temp_fin = DateAdd(Format$(reg_temp_ini, "hh:nn"), gb.minute, 15)
Durante todo el dia registra correctamente todos los valores.
Pero cuando nos aproximamos a las 00:00 horas, en cuanto pasa de 23:45, me aparece un valor incorrecto.
Tengo una condición, mediante la cual cuando reg_temp es igual a reg_temp_fin me graba el valor de la fecha, hora y temperatura.
Pero cuando se produce el hecho de acercarse a 00:00 la comparación es falsa y claro, deja de trabajar bien la rutina.
Teneis idea de como podría subsanar este problema ?? Le he dado muchas vueltas sin conseguir pasar por esas 00:00 y tener un resultado satisfactorio.
Daros las gracias anticipadas y a la espera de vuestros comentarios os envío un cordial saludo.
Juan Sebastian
|
#1 Jueves, 29 Noviembre 2018, 18:38 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Operacion Entre Horas Con DateAdd
Bienvenido al foro.
El tema de las fechas es un poco lío de entender, por cuanto las fechas pueden ser absolutas, es decir que marcan un momento real del tiempo, con lo que tienen que tener en cuenta el uso horario de la máquina en que se ejecuta el programa, o relativas, en las que no importa eso de la ubicación y sólo se trata de un dato más.
Las funciones de Fecha de gambas a veces respetan el uso horario y a veces no. Revisa en la documentación las funciones que usas para rellenar esas variables, así verás que no es lo mismo Date, que sí tiene en cuenta el uso horario, que cDate o Val (hablo de memoria), que no lo tienen en cuenta.
Saludos
=================== No podemos regresar
|
#2 Jueves, 29 Noviembre 2018, 20:02 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Re: Operacion Entre Horas Con DateAdd
Tal vez el problema es que le sumas minutos a un tiempo que tiene limitado por formato a hh:nn es decir que cuando los minutos sean una hora esta se suma a la hora de inicio y si esta es mas de 24 vuelve a cero pero se suma un dia mas, pero como por el formato hh:nn nunca se ve ese incremento de un dia.
Dajo un ejemplo para que lo veas.
Saludos y bienvenido al foro.
Descripción: |
|
Descargar |
Nombre del archivo: |
ejemplo-fecha-adicion-0.0.1.tar.gz |
Tamaño: |
11.31 KB |
Descargado: |
29 veces |
Descripción: |
|
Descargar |
Nombre del archivo: |
ejemplo-fecha-adicion-0.0.1.tar.gz |
Tamaño: |
11.31 KB |
Descargado: |
29 veces |
Descripción: |
|
Descargar |
Nombre del archivo: |
ejemplo-fecha-adicion-0.0.1.tar.gz |
Tamaño: |
11.31 KB |
Descargado: |
29 veces |
|
#3 Jueves, 29 Noviembre 2018, 23:31 |
|
|
inforpalma
Usuario
Registrado: Junio 2017
Mensajes: 15
Edad: 61
|
Re: Operacion Entre Horas Con DateAdd
Hola Shordi y Tincho.
Muchísimas gracias por contestar y gracias Tincho por el código.
Sigo estudiando como devanar este entresijo.
Realmente creo que es como dices tu Tincho.
Los registros los realizo cada 15 minutos, y como dije todo ok durante todo el día pero al llegar a las 23:45 es cuando peta.
Entiendo que aunque el día se fuera incrementando, la adición de 15 minutos a una hora dada (aunque fuera a las 23:45, no debería darme el error. Creí que al sumar 15 minutos a dicha hora, esta pasaría a ser las 00:00 o dicho de otro modo, si la coincidencia en la hora de registro fuera a las 23:55 debería realizar el siguiente registro a las 00:10. Pero no es así.
Os agradezco la bienvenida y el detalle de contestarme.
Un saludote y desearos un muy buen fin de semana.
|
#4 Viernes, 30 Noviembre 2018, 18:19 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Re: Operacion Entre Horas Con DateAdd
...y como dije todo ok durante todo el día pero al llegar a las 23:45 es cuando peta...
Mira de hacer la suma de tiempo usando el día también no solo la hora como haces. Es mas en el código que subí podras ver que que uso año,mes,dia,hora,minuto,segundo.
La forma segura de hacer la suma de tiempo es usando todos los ordenes de magnitud desde la menor (en tu caso el minuto) hasta el año. y luego si quieres mostrar solo el HH:MM pues lo restringes con format y listo.
Operar
yyyy mm dd hh nn
Mostrar o registrar
hh nn
Saludos.
|
#5 Lunes, 03 Diciembre 2018, 14:00 |
|
|
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
Re: Operacion Entre Horas Con DateAdd
Saludos y bienvenido, inforpalma
En mi opinión, como ya ha comentado Tincho, deberías usar el objeto "Date" tal cual, ya que contiene todos los datos de fecha y tiempo y puedes operar con ellos de manera transparente usando las funciones DateAdd() y DateDiff(). Luego, una vez obtenido el resultado, puedes formatear la salida a tu gusto, pero es fundamental entender el funcionamiento de las clases Date y Time.
http://gambaswiki.org/wiki/lang/time
http://gambaswiki.org/wiki/lang/date
http://gambaswiki.org/wiki/cat/time
Espero que sea de ayuda, si te sirve de consuelo, todos hemos tenido quebraderos de cabeza con esto y con las conversiones a UTC, que sigo sin enterarme
=================== Jesús Guardón
Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".
"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
|
#6 Lunes, 03 Diciembre 2018, 22:36 |
|
|
inforpalma
Usuario
Registrado: Junio 2017
Mensajes: 15
Edad: 61
|
Re: Operacion Entre Horas Con DateAdd
Hola, amigos.
Tras unos días de desconexión del PC (dios mio el santo trabajo), acabo de leer vuestros mensajes.
Daros las gracias por los comentarios y procedo a modificar el código como me indicais.
Lo pongo en prueba y espero tener exito (seguro que asi sera)
Gracias de nuevo y os informo de como me va el pastel
|
#7 Martes, 04 Diciembre 2018, 21:44 |
|
|
inforpalma
Usuario
Registrado: Junio 2017
Mensajes: 15
Edad: 61
|
Re: Operacion Entre Horas Con DateAdd
Hola Shordi, Tincho y Jguardon......
Bueno, deciros que ha sido un éxito total la modificación del código siguiendo vuestras indicaciones. Efectivamente gambas no parece tratar igual fecha / hora de hora separada.
Haciendo lo que habéis indicado esta noche me ha actualizado correctamente los registros a partir de la 23:45, sin ningún problema.
Daros de nuevo las gracias y enviaros un fuerte saludo.
Hasta pronto....
|
#8 Miercoles, 05 Diciembre 2018, 11:54 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Re: Operacion Entre Horas Con DateAdd
Hola Shordi, Tincho y Jguardon......Daros de nuevo las gracias y enviaros un fuerte saludo.
Bueno es grato poder ayudar.
Espero que en algun momento puedas compartir el código o hacer algún ejemplo relacionado lo que has estado haciendo.
De esta manera todos aprendemos un poquito mas.
Saludos.
|
#9 Miercoles, 05 Diciembre 2018, 12:42 |
|
|
inforpalma
Usuario
Registrado: Junio 2017
Mensajes: 15
Edad: 61
|
Re: Operacion Entre Horas Con DateAdd
Hola Tincho y amigos.
Atendiendo tu indicacion, voy a describir rápidamente que he hecho con Gambas.
Se me planteo la necesidad de realizar una aplicación para el control de 10 cámaras frigoríficas de un Hotel en Granada.
Yo vivo en Palma de Mallorca y se me ocurrió hacer el siguiente tandem :
Un PLC de la casa Industrial Shiels el cual está basado en Arduino con una placa Arduino Mega y una Raspberry conectados ambos por el puerto serie.
En el PLC hago correr un Sketch que controla las sondas de temperatura y gestion del puerto com y mediante la raspberry, corriendo Debian y a través de VNC controlo la aplicación así como su modificación a distancia.
La verdad es que llevan las sondas de temperatura conectadas hace ya casi 2 meses y funciona correctamente. Envía correos en caso de alarma y realiza un registro en SQLite de todas las señales.
Estoy muy contento desde ayer, que gracias a vuestra ayuda he podido terminar con el correcto registro de los datos.
Esta es la pantalla principal de la aplicación en gambas 3
Y estos los registros
He capturado los de anoche para que veais que el cambio de hora/dia lo realiza correctamente. Gran alegría por mi parte ya que estaba desesperado con este tema.
Bueno, espero haberos ilustrado un poquito con esta simple aplicación y os deseo unos muy buenos días festivos.
Un saludo y gracias de nuevo.
Juan.
|
#10 Miercoles, 05 Diciembre 2018, 21:45 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 2
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|