在我的服务器上,我保留一个操作日志,并使用MYSQL NOW()
函数生成的时间戳来跟踪。但问题是生成的时间戳在UTC
,我想要{{ 1}}函数生成与NOW()
的本地时间对应的时间戳。我尝试了SET时区,但它无法正常工作
Asia/Kolkata
我做错了什么?
答案 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()”,但想在应用程序的本地时区中查询日期/时间,这将非常有用。