values - ¿MySQL puede convertir una hora UTC almacenada a la zona horaria local?
mysql timezone configuration valid values (5)
No estoy seguro de qué matemática se puede hacer en un tipo de datos DATETIME, pero si está utilizando PHP, le recomiendo utilizar las marcas de tiempo basadas en números enteros. Básicamente, puede almacenar un entero de 4 bytes en la base de datos utilizando la función de tiempo () de PHP. Esto hace que las matemáticas sean mucho más sencillas.
¿Puede MySQL convertir una hora UTC almacenada a timezon: ed time local directamente en una declaración de selección normal?
Supongamos que tiene algunos datos con una marca de tiempo (UTC).
CREATE TABLE `SomeDateTable` (
`id` int(11) NOT NULL auto_increment,
`value` float NOT NULL default ''0'',
`date` datetime NOT NULL default ''0000-00-00 00:00:00'',
PRIMARY KEY (`id`)
)
Entonces cuando yo
"select value, date from SomeDateTable";
Por supuesto, obtengo todas las fechas como en su formulario UTC almacenado.
Pero digamos que me gustaría tenerlos en otra zona horaria (con horario de verano), ¿puedo agregar algo de magia a la consulta de selección para que pueda recuperar todas las fechas en la zona horaria seleccionada?
"select value, TIMEZONE(date, "Europe/Berlin") from SomeDateTable";
¿O debo hacer esto en alguna otra capa en la parte superior, como en algún código php? (Parece ser que la mayoría de las personas han resuelto este problema).
Gracias Johan
Si su instalación de MySQL le permite usar CONVERT_TZ es una solución muy limpia, este ejemplo muestra cómo usarla.
SELECT CONVERT_TZ( ''2010-01-01 12:00'', ''UTC'', ''Europe/Stockholm'' )
Sin embargo, no sé si esta es una buena manera, ya que algunas instalaciones de MySQL carecen de esta función, utilícela con cuidado.
Para aquellos que no pueden configurar el entorno mysql (por ejemplo, debido a la falta de acceso SUPER) para usar nombres de zona horaria amigables para el ser humano como "America / Denver" o "GMT" también puede usar la función con compensaciones numéricas como esta:
CONVERT_TZ(date,''+00:00'',''-07:00'')
Propongo usar
SET time_zone = ''proper timezone'';
hecho una vez después de conectarse a la base de datos. y después de esto, todas las marcas de tiempo se convertirán automáticamente al seleccionarlas.
Sí, la función convert_tz.
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_convert-tz
select convert_tz(now(),@@session.time_zone,''+03:00'')
Para obtener el tiempo, solo use:
time(convert_tz(now(),@@session.time_zone,''+03:00''))