In MySQL caculating offset for a time zone

2019-02-06 05:36发布

Is there a way in MySQL to calculate the offset for any timezone? For example, to get the local time in the timezone Asia/calcutta. What I want to do is calculate the offset for this timezone and add that offset to GMT to get the local time.

8条回答
冷血范
2楼-- · 2019-02-06 06:16

The offset will depend on the time that you're interested in - for instance, I'd currently have an offset of one hour from UTC, but during the winter my offset would be zero.

Judging by the docs page on MySQL time zone support, you want to use the convert_tz function. If you're trying to convert UTC to local time, pass in "Etc/GMT+0" as the "from" time zone, and "Asia/Calcutta" as the "to".

查看更多
小情绪 Triste *
3楼-- · 2019-02-06 06:22
DATEDIFF(NOW(), UTC_TIMESTAMP())
查看更多
放我归山
4楼-- · 2019-02-06 06:28
SET time_zone = '-07:00';

You can just pass in an offset

http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html

查看更多
时光不老,我们不散
5楼-- · 2019-02-06 06:31

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

If the server's timezone is PST this will return -8.

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

Add the result of the above to any unix timestamp if you want to compare it to MySQL DateTimes.

查看更多
We Are One
6楼-- · 2019-02-06 06:32
SELECT TIME_FORMAT(TIMEDIFF(NOW(), CONVERT_TZ(NOW(), 'Asia/Calcutta', 'UTC')), '%H:%i') AS offset;

Giving

+--------+
| offset |
+--------+
|  05:30 |
+--------+
查看更多
手持菜刀,她持情操
7楼-- · 2019-02-06 06:33

If you want to calculate the offset of a time zone such as America/Vancouver from UTC you can do it as follows:

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

For this to work you will first need to load the time zone information into mysql as outlined here: http://dev.mysql.com/doc/refman/5.0/en/mysql-tzinfo-to-sql.html

查看更多
登录 后发表回答