zona time_zone modificando madrid horario horaria hora europe establecer datos cambiar mysql timezone offset

mysql - modificando - set time_zone=''europe/madrid'';



En MySQL caculating offset para una zona horaria (8)

Combiné las respuestas de @ColinM y @Kenneth Spencer porque quería el desplazamiento de una zona horaria arbitraria en horas:

TIMESTAMPDIFF(HOUR, UTC_TIMESTAMP(), CONVERT_TZ(UTC_TIMESTAMP(), "UTC", "America/Denver"))

-

SELECT ROUND(TIMESTAMPDIFF(MINUTE, UTC_TIMESTAMP(), CONVERT_TZ(UTC_TIMESTAMP(), "Etc/UTC", "Asia/Kolkata"))/60,1)

Como señaló Kenneth, deberás cargar la información de la zona horaria: http://dev.mysql.com/doc/refman/5.0/en/mysql-tzinfo-to-sql.html

Pero luego puedes hacer cosas divertidas como encontrar el desplazamiento para múltiples zonas horarias a la vez:

SELECT Name, TIMESTAMPDIFF(HOUR, UTC_TIMESTAMP(), CONVERT_TZ(UTC_TIMESTAMP(), "Etc/UTC", Name)) as Offset FROM mysql.time_zone_name WHERE (Name IN (''America/Vancouver'', ''Etc/UTC'', ''America/Denver''))

Dando:

+-------------------+--------+ | Name | Offset | +-------------------+--------+ | America/Denver | -6 | | America/Vancouver | -7 | | Etc/UTC | 0 | +-------------------+--------+

¿Hay alguna manera en mysql de calcular el desplazamiento para cualquier zona horaria? Por ejemplo, para obtener la hora local en la zona horaria ''Asia / Calcuta'', lo que quiero hacer es calcular la compensación para esta zona horaria y agregar esa compensación a GMT para obtener la hora local.


La compensación dependerá del tiempo que le interese, por ejemplo, actualmente tendría una compensación de una hora de UTC, pero durante el invierno mi compensación sería cero.

A juzgar por la página de documentos en el soporte de zona horaria MySQL , quiere usar la función convert_tz . Si intenta convertir UTC a la hora local, pase "Etc / GMT + 0" como zona horaria "desde" y "Asia / Calcuta" como "a".


Me pregunto si la respuesta de @ ColinM es segura. ¿Lee el reloj una o dos veces? ¿Hay alguna posibilidad de que UTC_TIMESTAMP () y NOW () puedan estar separados por un segundo? No lo sé, pero esto evitaría eso.

SET @now = now(); SET @utc = CONVERT_TZ(@now, ''SYSTEM'', ''+00:00''); SELECT TIMESTAMPDIFF(MINUTE, @utc, @now);


Si desea calcular el desplazamiento de una zona horaria como América / Vancouver desde UTC, puede hacerlo de la siguiente manera:

SELECT (unix_timestamp() - unix_timestamp(convert_tz(now(), ''Etc/UTC'', ''America/Vancouver''))) / 3600 as offset;

Para que esto funcione, primero deberá cargar la información de la zona horaria en mysql como se describe aquí: http://dev.mysql.com/doc/refman/5.0/en/mysql-tzinfo-to-sql.html


SELECT TIMESTAMPDIFF(HOUR, UTC_TIMESTAMP(), NOW());

Si la zona horaria del servidor es PST, esto devolverá -8 .

SELECT TIMESTAMPDIFF(SECOND, NOW(), UTC_TIMESTAMP());

Agregue el resultado de lo anterior a cualquier marca de tiempo de unix si desea compararlo con MySQL DateTimes.


SELECT TIME_FORMAT(TIMEDIFF(NOW(), CONVERT_TZ(NOW(), ''Asia/Calcutta'', ''UTC'')), ''%H:%i'') AS offset;

Dar

+--------+ | offset | +--------+ | 05:30 | +--------+



DATEDIFF(NOW(), UTC_TIMESTAMP())