MySQLManejo de zonas horarias


Observaciones

Cuando necesite manejar información de tiempo para una base de usuarios de todo el mundo en MySQL, use el tipo de datos TIMESTAMP en sus tablas.

Para cada usuario, almacene una columna de zona horaria de preferencia de usuario. VARCHAR (64) es un buen tipo de datos para esa columna. Cuando un usuario se registra para usar su sistema, solicite el valor de la zona horaria. El mío es el tiempo del Atlántico, America/Edmonton . El suyo puede o no ser Asia/Kolkata o Australia/NSW . Para una interfaz de usuario para esta configuración de preferencia de usuario, el software WordPress.org tiene un buen ejemplo.

Finalmente, siempre que establezca una conexión desde su programa host (Java, php, lo que sea) a su DBMS en nombre de un usuario, emita el comando SQL

 SET SESSION time_zone='(whatever tz string the user gave you)'

Antes de manejar cualquier dato de usuario que involucre tiempos. Luego, todas las veces de TIMESTAMP que haya instalado se procesarán en la hora local del usuario.

Esto hará que todas las horas que ingresen a sus tablas se conviertan a UTC, y que todas las horas que salgan se traduzcan a local. Funciona correctamente para NOW () y CURDATE (). De nuevo, debe usar TIMESTAMP y no los tipos de datos DATETIME o DATE para esto.

Asegúrese de que el sistema operativo de su servidor y las zonas horarias de MySQL predeterminadas estén configuradas en UTC. Si no hace esto antes de comenzar a cargar información en su base de datos, será casi imposible de arreglar. Si utiliza un proveedor para ejecutar MySQL, insista en que lo hagan correctamente.

Manejo de zonas horarias Ejemplos relacionados