为MYSQL设置时区()

时间:2017-07-06 04:04:33

标签: php mysql

在我的服务器上,我保留一个操作日志,并使用MYSQL NOW()函数生成的时间戳来跟踪。但问题是生成的时间戳在UTC,我想要{{ 1}}函数生成与NOW()的本地时间对应的时间戳。我尝试了SET时区,但它无法正常工作

Asia/Kolkata

我做错了什么?

3 个答案:

答案 0 :(得分:3)

您的问题不明确但如果您想将UTC的日期和时间值更改为您的时区,则可以使用

CONVERT_TZ(date, 'UTC',  'Asia/Kolkata')

您可以在时区中选择UTC日期和时间值:

SELECT CONVERT_TZ(date, 'UTC',  'Asia/Kolkata') AS local FROM table

如果CONVERT_TZ功能不起作用,则需要安装时区(时区应该已经存储在MySQL中)。需要注意的是,您需要在数据库中存储UTC值,然后转换为您想要的任何时区。

答案 1 :(得分:1)

试试这个:

SET GLOBAL time_zone = "Asia/Kolkata";
SET time_zone = "+05:30";
SET @@session.time_zone = "+05:30";

答案 2 :(得分:0)

当您使用 PHP(作为 OP)时,如果您无法安装 CONVERT_TZ 函数,则转换时区的另一个选项是使用偏移间隔。

在 PHP 中:

date_default_timezone_set('Asia/Kolkata'); // Set timezone if different from default
$TZ_OFFSET = date('Z')/3600; // Timezone offset in hours from UTC (allows for DST where applicable)

然后使用该偏移变量运行 MySQL 查询

SELECT (modified_date + interval $TZ_OFFSET hour) AS modified_date FROM table;

如果您想在设置为 UTC 的数据库服务器上使用“NOW()”,但想在应用程序的本地时区中查询日期/时间,这将非常有用。