私は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として使用していることです。
タイムゾーンオフセットからではなくタイムゾーン名を使用してタイムゾーンを変換する方法はありますか?
最後に私は答えを得ました:
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データベースディレクトリにコピーして、サーバーを再起動します。
質問に答えるには:
タイムゾーンオフセットからではなくタイムゾーン名を使用してタイムゾーンを変換する方法はありますか
関数 - 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タイムゾーンテーブルを設定するプロセスを説明する「タイムゾーンテーブルの生成」セクションがあります。