resultado de restar 2 horas
saludos a todos los del foro nuevamente...
estuve buscando en los foros viejos, y encontre informacion sobre la resta de 2 horas, lo tuve leyendo y analizando. bueno mi inquietud es la siguiente restar 2 horas HE, HS y que me de un total(08:23:19) por ejemplo y hacer una condicion si es mayor o menor de 8 horas, con el codigo que puse me da el siguiente resultado= 08:23:19 a.m. y no quiero que aparezca (a.m.), otra cosa es que cuando pasa de 12 horas se vuelve loco, es decir si son 13 horas dice 1 hora, y el resultado no me da, bueno el codigo que use es el siguiente.. her hora de entrada hsr hora de salida hora resultado de la resta Código:
var acepto sugerencia de cambiar todo el codigo por uno mejor gracias.........................................................................:confused: |
Hola,
no se si te servirá de algo ... Ya que TTime = TDateTime ... Por que no lo haces así: Para sumar dos horas a Now --> DosHorasMas := Now+((1/24)*2) Para restar dos horas a Now --> DosHorasMenos := Now-((1/24)*2) y los calculos los haces con la fecha incluida ... |
No se pero porque no restas directamente las dos horas, eso te daria un número por ejemplo:
14:00:00 - 12:00:00 = 2.00 Tal ves de esta forma te sirve por lo menos para hacer los calculos. |
fdelamo... puedes darme un poco mas de detalles por favor porque la verdad no entendi mucho como usarlo, podrias ser mas especifico o donde y como lo uso???????????
|
alejandro porque cuando resto las dos horas directamente me pasa lo mismo, si da mas de 12 horas, ejemplo 13 horas me dice 1 hora, y eso es lo que quiero corregir....
|
Los valores TTime, TDate y TDateTime, representan las fechas de la siguiente manera: La parte entera es la fecha (la fecha 0 creo que es 31/12/1899, creo) y los decimales la hora, por tanto, una hora es 1/24, un minuto 1/24/60 ...
Si quieres sumar dos horas Fecha+2/24 No se si me explico .... |
ok, entendi la logica, pero si tengo las 2 horas 08:13:14 a.m. y 09:52:17 p.m. como expreso esas 2 con el metodo que me diste?????????
|
Al tenerlo en un TDate, TTime o TDateTime ya lo tienes así, ¿o es que tienes esas horas en texto?
|
restar hs-he
hora:=hs-((1/24)*hs); asi lo puse y no me da, da otra hora y sigue dandome el formato am/pm, me imagino que lo exprese mal verdad?? |
Si quieres restar dos horas, se hace directamente: hs-he, pero ten en cuenta que el resultado no es una hora, es la diferencia de horas, teniendo en cuenta que 1 hora = 1/24
|
exacto e alli el detalle, si resto directo, hs-he 11:02:10 p.m. - 08:59:10 a.m. son 14 horas 7 minutos, y me da 2:33:00 p.m.
como hago que el 2:33:00 p.m. se tranforme en 14:07:00????????????? |
Si puedes, te aconsejo que cambies el tipo del campo; en lugar de usar hora usa un TimeStamp (fecha y hora todo en el mismo campo)
Después puedes usar de la unidad DateUtils, toda una batería de funciones: - HoursBetween(fecha1, fecha2); - MinutesBetween - DaysBetween - MillisecondsBetween - etc. La fecha y hora en sí misma, no se guarda con ningún formato de 12/24 horas. Es al tiempo de mostrarlo en pantalla cuando aplicas el formato que quieres. Para ello puedes usar FormatDateTime('hh:nn:ss',fecha1); Al usar el formato de fecha+hora, no tendrás ningún problema en sumar dos fechas, o sumarle 33 horas, siempre obtendrás el resultado correcto. Cita:
Edito: El resultado no podrás codificarlo como una TTime, ni como TDateTime, ya que tiene el límite en 24 horas, por tanto, jamás podrás crear una hora con 26 horas. Saludos |
El windows es quien te define el formato de a.m. y p.m. o formato 24 Hrs.
Búscale por ese lado... y si es necesario, haz que tu aplicación cambie el formato cuando lo uilices. Ahora que... pudieras agarrar la hora y "decodificarla" y construir tu propia cadena si es que no quieres cambiar el formato de hora de windows. Suerte! |
Si entendi correctamente te interesa saber cuanto tiempo paso entre dos horas distintas. Si es así lo que tendrias que hacer es:
vartipofloat:= Hora1-Hora2; En vartipofloat tendras como resultado la cantidad de horas y minutos que pasaron, las horas en la parte entera y los minutos en los decimales. Suerte |
listo, gracias a todos por responder, ahora estoy probando todo y cuando me de perfecto publico el codigo......
|
|
sumar meses a una fecha
ejemplo
sumarle 48 meses a una fecha o 4 años a una fecha sin tener que utilizar decode Cita:
|
Cita:
Saludos. |
al hacer la diferencia de hroas aparece asi ,
14:00:00 - 12:00:00 = 2.00 o algo asi min:=minutesbetween(he,hs); dec:=roundto(min/60,-1); en este caso reste 5:0:0 - 6:30:0 y dio dec:1,5 pero luego necesito que ese 1,5 vuelva a 1:30:00 pm o am, como seria? ya que "dec" es decimal y tengo q pasarlo a time. gracias! |
La franja horaria es GMT +2. Ahora son las 20:48:12. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi