web-dev-qa-db-ja.com

タイムゾーン名を使用してMySQLのタイムゾーンを変換する方法は?

私は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として使用していることです。

タイムゾーンオフセットからではなくタイムゾーン名を使用してタイムゾーンを変換する方法はありますか?

6
ajay p

最後に私は答えを得ました:

MySQLのインストール手順により、mysqlデータベースに一連のタイムゾーンテーブルが作成されます。 Windowsでは、テーブルは事前に初期化されたmysqlデータベースの一部です。 Unixでは、テーブルはmysql_install_dbの実行時に作成され、RPMインストール中に自動的に、またはtarファイルからインストールする場合は手動で作成されます。ただし、これらのタイムゾーンテーブルは空のテーブルとして作成されます。つまり、名前付きタイムゾーンは使用できません。

名前付きタイムゾーンを有効にするには、テーブルをロードする必要があります。これはオプションの構成手順ですが、実行しない限り、タイムゾーンのサポートはSYSTEMゾーンと '+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-UXなど、一部のシステムにはタイムゾーンファイルがありません。これらの場合、MySQLは、配布された http://dev.mysql.com/downloads/timezones.html に、(MyISAMテーブルファイルの形式で)入力されたタイムゾーンテーブルのセットを含むディストリビューションを提供します。ディストリビューションをダウンロードし、mysqlデータベースにファイルをインストールして、空のテーブルを置き換えることができます。サーバーを停止し、ファイルをmysqlデータベースディレクトリにコピーして、サーバーを再起動します。

2
ajay p

質問に答えるには:

タイムゾーンオフセットからではなくタイムゾーン名を使用してタイムゾーンを変換する方法はありますか

関数 - CONVERT_TZ には次の例と警告があります。

mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET');
    -> '2004-01-01 13:00:00'

「MET」や「Europe/Moscow」などの名前付きタイムゾーンを使用するには、タイムゾーンテーブルを適切に設定する必要があります。手順については、セクション10.6「MySQLサーバーのタイムゾーンのサポート」を参照してください。

タイムゾーンサポート のセクションには、mysqlタイムゾーンテーブルを設定するプロセスを説明する「タイムゾーンテーブルの生成」セクションがあります。

2
Derek Downey