lo que estas usando es la hora y fecha de la maquina, tanto como hora de inicio como hora de fin, es decir, el cambio de hora no tiene nada que ver con la API (de ahi, supongo, la dificultad de encontrar eso)
para no liar las cosas, tu programa empieza, coje la hora del sistema y se queda a la espera, cuando la llamada termina, coje la nueva hora y la resta...
ambos datos son internos al sistema y no tienes control sobre ellos, asi que si, si la llamada empieza antes de un cambio de hora y termina despues, tendras una duracion rara (con + o - 1 hora)
ahora, en cuanto a la solucion, se me ocurren varias vias, la primera es que en tu programa simple tengas en cuenta las fechas de cambio de hora
de la segunda no estoy seguro, ya que no se si tiene eso en cuenta y habria que hacer pruebas, pero podrias intentar usar el objeto Calendar (en vez del System.currentTimeMillis) y sacar las duraciones de ahi... es posible que la clase Calendar tenga en cuenta esas cosas, pero como te he dicho, no estoy seguro y habria que hacer pruebas
si funcionara asi, la segunda opcion me parece mas correcta y elegante que la primera (y que te costara menos)
--
Dale fuego a un hombre y estara caliente un dia, prendele fuego y estara caliente el resto de su vida.
investigando
de sammael
(Puntos:2)
Lunes, 24 Abril de 2006, 13:39h
1) la duracion de la llamada es un dato que se puede calcular a partir de fecha de inicio y la fecha de fin, por lo tanto no es apropiado de guardar en la base de datos.
2) la funcion currenttime te da la hora actual sin mas. Si hay un cambio de hora, tendrias que contemplarlo cuando calculas la duracion.
Sugerencia:
Podrías meter una nueva tabla en base de datos donde pongas los cambios de hora que se dan en el sistema.
La tabla seria tal que asi
Hora NuevaHora
x1 y1
x2 y2
Esto significa que en el dia/hora "x1" se cambio el reloj a "y1".
La tabla esta, habria que mantenerla actualizada y te serviria no solo para los cambios de hora oficiales, sino tambien para cualquier otro cambio de hora que se haga.
Luego gracias a esta tabla, puedes saber cuando hay un cambio de hora y calcular la duracion correctamente. Es mas complicado el calculo: con este nuevo sistema la duracion la calculas a partir de la fecha de inicio, la fecha de fin de la llamada y los datos de la tabla de cambios de hora
suerte
Yo creo que funcionará sin problemas, los tipos Date suelen ser internamente un entero con la epoch time, sabiendo eso, cuando pides la hora con un formato hh:mm es capaz de saber si estás en horario de invierno o de verano. De todas formas si no te fias, saca directamente el epoch time y haces la resta, con eso no fallas ;-)
1 respuesta por debajo de tu umbral de lectura actual.
Pues eso, usa le hora Greenwich, que sirve para estas cosas, ya que no tiene cambio horario.
Así, además, puedes seleccionar el país, etc. En este caso no es muy necesario, pero cuando se hacen cosas mínimamente complicadas con horas, sale a cuenta.
Después, claro, hay que leer bien la hora solar (ojo con el cambio de fecha) y ya lo tendrás!
Re:Usa GMT
de sammael
(Puntos:2)
Lunes, 24 Abril de 2006, 16:02h
1 respuesta por debajo de tu umbral de lectura actual.
1 respuesta por debajo de tu umbral de lectura actual.
podría arrancar un thread que se dedicara a contar los segundos y actualizar la duración, pero me parece un poco rebuscado...es posible que hayan varias llamadas a la vez, si hay 30, 30 threads? un thread con un 'pool' de contadores a actualizar?
Entonces funcionaria bien no? Yo construyo los Timestamp a partir del
System.currentTimeMillis() y para calcular la duracion vuelvo a obtener esos valores con timestamp.getTime(), luego no habria problema.. no?
asi a bote pronto
(Puntos:4, Informativo)( http://barrapunto.com/ | Última bitácora: Lunes, 24 Febrero de 2014, 10:03h )
lo que estas usando es la hora y fecha de la maquina, tanto como hora de inicio como hora de fin, es decir, el cambio de hora no tiene nada que ver con la API (de ahi, supongo, la dificultad de encontrar eso)
para no liar las cosas, tu programa empieza, coje la hora del sistema y se queda a la espera, cuando la llamada termina, coje la nueva hora y la resta...
ambos datos son internos al sistema y no tienes control sobre ellos, asi que si, si la llamada empieza antes de un cambio de hora y termina despues, tendras una duracion rara (con + o - 1 hora)
ahora, en cuanto a la solucion, se me ocurren varias vias, la primera es que en tu programa simple tengas en cuenta las fechas de cambio de hora
de la segunda no estoy seguro, ya que no se si tiene eso en cuenta y habria que hacer pruebas, pero podrias intentar usar el objeto Calendar (en vez del System.currentTimeMillis) y sacar las duraciones de ahi... es posible que la clase Calendar tenga en cuenta esas cosas, pero como te he dicho, no estoy seguro y habria que hacer pruebas
si funcionara asi, la segunda opcion me parece mas correcta y elegante que la primera (y que te costara menos)
Dale fuego a un hombre y estara caliente un dia, prendele fuego y estara caliente el resto de su vida.
yo creo que tiene razon
(Puntos:2)( Última bitácora: Martes, 07 Diciembre de 2010, 18:45h )
2) la funcion currenttime te da la hora actual sin mas. Si hay un cambio de hora, tendrias que contemplarlo cuando calculas la duracion.
Sugerencia:
Podrías meter una nueva tabla en base de datos donde pongas los cambios de hora que se dan en el sistema.
La tabla seria tal que asi
Hora NuevaHora
x1 y1
x2 y2
Esto significa que en el dia/hora "x1" se cambio el reloj a "y1".
La tabla esta, habria que mantenerla actualizada y te serviria no solo para los cambios de hora oficiales, sino tambien para cualquier otro cambio de hora que se haga.
Luego gracias a esta tabla, puedes saber cuando hay un cambio de hora y calcular la duracion correctamente. Es mas complicado el calculo: con este nuevo sistema la duracion la calculas a partir de la fecha de inicio, la fecha de fin de la llamada y los datos de la tabla de cambios de hora
suerte
da igual
(Puntos:1)( Última bitácora: Jueves, 23 Agosto de 2007, 11:40h )
Usa GMT
(Puntos:3, Informativo)( http://barrapunto.com/ | Última bitácora: Martes, 27 Junio de 2006, 21:11h )
Así, además, puedes seleccionar el país, etc. En este caso no es muy necesario, pero cuando se hacen cosas mínimamente complicadas con horas, sale a cuenta.
Después, claro, hay que leer bien la hora solar (ojo con el cambio de fecha) y ya lo tendrás!
Re:Asunto
(Puntos:1)( Última bitácora: Lunes, 21 Diciembre de 2009, 20:28h )
Re:Documentación
(Puntos:1)( Última bitácora: Lunes, 21 Diciembre de 2009, 20:28h )
System.currentTimeMillis() y para calcular la duracion vuelvo a obtener esos valores con timestamp.getTime(), luego no habria problema.. no?