0

私はモバイルアプリと休憩サービスを持っています。モバイル アプリは、Web サービスに UTC 日時とタイム ゾーンを生成して提供します。PHPを使用して両方の値をmysqlに保存する必要があります。

リモート ソースから日付時刻を取得しているため、mysql の UTC_TIMESTAMP() を使用して「現在の」utc 時刻を生成できません。

作成された(DATETIME)とタイムゾーン(VARCHAR)の2つの列を持つテーブルがあります

PHPでは、次のものを収集します。

$created = "2010-09-30 12:31:10"; //Actual UTC time
$timezone = "America/Los_Angeles"

サーバーのデフォルトのタイムゾーンとして保存せずに、INSERT ステートメントをどのようにして $created をそのまま (UTC) に保存するのでしょうか?

PHPでUTCからサーバーの現地時間に変換する必要がありますか、それともMySQLで何らかの方法でサイドステップできますか?

4

1 に答える 1

0

私の知る限り、MySQL は、たとえば PostgreSQL のように、日付列のタイム ゾーン情報をサポートしていません。

日付をそのまま保存できないのはなぜですか?変換が行われないことはかなり確信しています。また、なぜタイムゾーン情報が必要なのですか? 後で表示するときに現地時間に変換する方が適切ではありませんか? 情報を表示している特定のユーザー向けですか?

「現在のタイム ゾーン設定は、UTC_TIMESTAMP() などの関数によって表示される値、または DATE、TIME、または DATETIME 列の値には影響しません。また、これらのデータ型の値は UTC で保存されません。タイム ゾーンは、から変換する場合にのみ適用されます。 TIMESTAMP 値. DATE、TIME、または DATETIME 値にロケール固有の演算が必要な場合は、それらを UTC に変換し、演算を実行してから元に戻してください。" source https://dev.mysql.com/doc/refman/5.5 /en/time-zone-support.html

つまり、MySQL は TIMESTAMP() および同様の関数から現地時間を返すためにタイム ゾーン情報のみを使用し、挿入または選択されたデータのオンザフライ変換には使用しません。

于 2012-10-03T08:03:02.960 に答える