我的数据库服务器(运行MySql 5.5)设置为UTC,并且日期以无符号整数的形式存储在数据库中。该数据库主要用于存储在特定时间(exec_time)运行的任务。
我通过使用用户登录时区(此处为BST)在PHP中创建一个时间戳来插入任务。例如,我设置了一个任务在1351396800时运行,这是明天早上4点GMT。
我使用以下查询从数据库中提取任务:
SELECT * FROM tasks WHERE exec_time <= UNIX_TIMESTAMP();
当时钟在明天凌晨2点倒回一小时时,这个设置还可以使用吗?
更新:PHP成功地转换了日期。当PHP时区设置为Europe/Dublin(目前是BST)时,添加的两个事件分别在午夜12点和早上4点,存储如下:
mysql> select exec_time, FROM_UNIXTIME(exec_time) from tasks order by id desc limit 2;
+-------------+----------------------------+
| exec_time | FROM_UNIXTIME(exec_time) |
+-------------+----------------------------+
| 1351378800 | 2012-10-27 23:00:00 |
| 1351396800 | 2012-10-28 04:00:00 |