¡Vaya lio! ¿qué hora es? ...o de cómo manejar las horas entre postgresql y Xojo

Hola Alberto, tal vez todavía no te queda claro lo de las horas.

Intentaré otra vez desde el inicio, tu mensaje original indicaba:

Como por defecto (default) tu PgSQL está en

las horas se guardan como UTC, es decir, a las 10am local la base de datos lo guarda como las 9am UTC.

  • Entonces tu primer prueba, le pides a un campo timestamptz que te de la hora sin zona horaria (timezone) por lo que te da lo que tiene que son 09:00
  • Segundo comando, un campo sin tz, le pides la hora y te da las 09:00
  • Tercer comando, un campo con tz, le pides la hora y le indicas que la quieres para la zona de Madrid, arrojando las 10:00 como debe ser, si usaras otra zona horaria te daría la hora correcta, por ejemplo hora del centro de USA indicaría 03:00
  • Cuarto comando, un campo sin tz, le pides la hora y te la da como 09:00 ya que eso tiene y no la puede convertir porque no maneja el cambio zonas horarias. Si le pusieras cualquier otra zona horaria, siempre indicaría 09:00

Ese no es el comando necesario ya que le falta la zona horaria que quieres, ese comando lo pide sin zona horaria por lo que te regresará la hora en UTC, en este caso 09:27.

Debes usar el comando to_char(fecha at time zone ‘Europe/Madrid’, ‘HH24:MI’)

Espero que ahora ya esté claro por qué tu servidor Postgres guarda las 09:00 y no las 10:00 y cómo puedes hacer que te devuelva la hora que tu quieres.


Otro opción, pero no recomendada, es que cambies el Time Zone a tu servidor Postgres.

Lo mejor es entender lo que está pasando, que la base de datos está mejor en UTC y que para tener la hora de tu zona debes ejecutar el to_char informando la zona que quieras.

Si todavía no queda claro, dime y veo si lo puedo explicar mejor.

Saludos

1 Like