Convertir fecha de Odoo a timezone de Argentina en iReport
The snippet can be accessed without any authentication.
Authored by
Gabriel Davini
Edited
# Si la fecha que se quiere modificar está en el campo $F{Fecha_de_salida} puede crear una variable con esto:
$F{Fecha_de_salida}.isEmpty() ? "" : new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").format(
new Date(
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse($F{Fecha_de_salida}).getYear(),
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse($F{Fecha_de_salida}).getMonth(),
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse($F{Fecha_de_salida}).getDate(),
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse($F{Fecha_de_salida}).getHours() - 3,
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse($F{Fecha_de_salida}).getMinutes(),
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse($F{Fecha_de_salida}).getSeconds()
)
)
# El método parse() espera un string, asi que si el campo a parsear, $F{Fecha_de_salida} en este caso, *no* es un string hay que convertirlo con .toString()
# El resetType de la variable *tiene* que ser None para que ande.
# La "magia" está en el -3 de la hora. Lo malo de esto es que si son las 1 de la mañana, la hora se corregirá pero la fecha no. Para solucionar esto se
# podría probar esto:
$F{Fecha_de_salida}.isEmpty() ? "" : new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").format(
new Date(
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse($F{Fecha_de_salida}).getYear(),
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse($F{Fecha_de_salida}).getMonth(),
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse($F{Fecha_de_salida}).getHours() < 3 ? new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse($F{Fecha_de_salida}).getDate() - 1 : new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse($F{Fecha_de_salida}).getDate(),
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse($F{Fecha_de_salida}).getHours() < 3 ? 24 - new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse($F{Fecha_de_salida}).getHours() : new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse($F{Fecha_de_salida}).getHours() - 3,
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse($F{Fecha_de_salida}).getMinutes(),
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse($F{Fecha_de_salida}).getSeconds()
)
)
# pero no lo probé, no tuve tiempo ni ganas cuando escribí esto. También habría que ver si se puede meter SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse($F{Fecha_de_salida})
# en algún lado para no tener que escribirlo cada vez.
# Incluso estaría bueno evaluar alguna forma de convertir al Timezone del usuario, cosa de que sea más dinámico.
# Lo otro a tener en cuenta es que por lo que leí SimpleDateFormat es una clase de java >= 8, asi que si se usa una versión de java anterior hay
# que cambiarlo por la clase compatible, que no recuerdo cuál era ahora.
# Este snippet se debería llamar el "Snippet de las dudas" o algo asi.
Please register or sign in to comment