0


0

MySQLと国際日付

複数の場所に複数のサーバーがあり、フィールド日付にMySQLの日時タイプを使用し、フィールド日付に常にUTCタイムスタンプを持たせたいので、追加するときに `+ UTC_TIMESTAMP()+`を実行しますデータベース。 MySQLにUNIXのTIMESTAMPを出力させたいとしましょう。

サーバーAでこれを実行すると、UNIX_TIMESTAMP(STRING)を実行したときに "2009-06-17 12:00:00"という文字列が表示され、1245240000という数字が返されます。 UTC時間で2009-06-17 12:00:00です。 これで、サーバーBでも同じことができます。 そのUTC文字列から同じ文字列が返されますが、UNIX_TIMESTAMP(STRING)を再度実行すると、UTC 2である1245232800という誤った番号が返されます。 どうやってこれを回避できますか? PHP側で文字列からタイムスタンプへの変換をするべきですか?

2 Answer


1


こんにちは、

私はここで明白なことを尋ねます、あなたは両方のマシンで日付と時刻をチェックしましたか?

編集: …​ MySQLのタイムゾーンは両方のマシンで同じですか?

*更新:*わかりました。 問題は、UNIX_TIMESTAMPに渡されるタイムスタンプ文字列が現在のタイムゾーンの値であると解釈され、その後UTCに変換されることです。これは、MEZを使用しているため、2時間を引いてUTCに戻すことです。そのため、Unixタイムストリングに変換し直されると、7200がタイムスタンプから減算されます。

したがって、UNIX_TIMESTAMP()を使用して変換したときに見られるバリエーションは、UNIX Epochタイムストリングに戻ります。

ところで、あなたはあなたのUTC_TIMESTAMPをDATETIME型の代わりに格納するためにTIMESTAMP型を使用すべきではありませんか?

*更新:*保存された時間からプレゼンテーションの時間を分離することは間違いなく行く方法です。 その後、世界中の同じデータを再利用することができ、ユーザーにデータを提示するときに現地時間との間で変換するだけで済みます。

そうしなければ、タイムスタンプが作成されたときのタイムゾーンを保存してから、次のようにして解決しなければならないという複雑な並べ替えを行う必要があります。

  • 現地のタイムゾーンは、保存されたときの夏時間でした。

  • データが格納された時点のタイムゾーンとデータが表示されるタイムゾーンの違いは何ですか。

そのままにしておくと、UTCがそれを取り除きます。

返されるUTC時間に基づいて現地時間を自分で計算する必要がある場合、ほとんどのユーザーはそれほど幸せではありません。そのため、システムは通常、ユーザーの現在の現地時間に変換します。

ユーザーが現地時間で表現されたデータを望んでいるなら、これは当然です、そして、通常そうです。 UTCでデータを保存し提示する、私が考えることができる唯一の広く使用されているシステムは、UTC(またはより正確にはZULU時間)で維持される航空管制と飛行計画管理のためのシステムです。 。

HTH

乾杯、


0


あなたはこれをやってみましたか?

この指示を一緒に実行してください。

SET time_zone = 'UTC'; SELECT FROM_UNIXTIME(0)、UNIX_TIMESTAMP( '2009-06-17 12:00:00');
// 1970-01-01 00:00:00        1245240000

これらはクライアントセッションにのみ影響し、サーバー設定には影響しません。