我想在MySQL中将日期从一个时区转换为另一个时区,我正在尝试的MySQL查询是
SELECT DATE_FORMAT(CONVERT_TZ('2015-12-18 06:00:00', '+0:00', '-05:00' ),'%b %d %Y %h:%i %p') AS test
FROM appointment
正在正常工作。现在我遇到的问题是,我的数据库使用时区名为America/New_York。
是否有任何方法可以使用时区名称而不是时区偏移量来转换时区?
发布于 2015-12-31 10:29:48
最后,我得到了答案:
MySQL安装过程在mysql数据库中创建一组时区表。在Windows上,表是预初始化mysql数据库的一部分。在Unix上,表是在执行mysql_install_db时创建的,或者在RPM安装期间自动创建,或者在从tar文件安装时手动创建。但是,这些时区表是作为空表创建的,这意味着不能使用命名时区。
若要启用命名时区,必须加载表。这是一个可选的配置过程,但除非执行,时区支持仅限于系统区域和数值偏移(如'+06:00‘)。
在具有时区文件的系统上,最好使用它们加载MySQL时区表,以确保系统和MySQL时区基于相同的信息。许多Unix系统都有这些文件,通常位于/usr/share/zoneinfo下面。对于这样的系统,使用mysql_tzinfo_to_sql程序将文件内容转换为可以通过MySQL程序加载到mysql中的SQL语句。如果文件位于/usr/share/zoneinfo,命令如下所示:
shell> mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql
有些系统没有时区文件,如Windows和HP.对于这些情况,MySQL提供了一个发行版( http://dev.mysql.com/downloads/timezones.html ),它包含一组填充的时区表(以MyISAM表文件的形式)。您可以下载发行版并在mysql数据库中安装文件以替换空表。停止服务器,将文件复制到mysql数据库目录,然后重新启动服务器。
发布于 2015-12-16 15:27:36
回答以下问题:
有没有办法使用时区名称而不是时区偏移量来转换时区?
函数CONVERT_TZ
有以下示例和警告:
mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');
-> '2004-01-01 13:00:00'
注若要使用命名时区(如“MET”或“欧洲/莫斯科”),必须正确设置时区表。有关说明,请参阅10.6节“MySQL服务器时区支持”。
关于时区支援的部分有一个“填充时区表”部分,它描述了设置mysql表的过程。
https://dba.stackexchange.com/questions/123835
复制相似问题