Skip to content
Snippets Groups Projects

Convertir fecha de Odoo a timezone de Argentina en iReport

  • Clone with SSH
  • Clone with HTTPS
  • Embed
  • Share
    The snippet can be accessed without any authentication.
    Authored by Gabriel Davini
    Edited
    snippetfile1.txt 2.78 KiB
    # 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.
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Finish editing this message first!
    Please register or to comment