web-dev-qa-db-ja.com

現在のGMT時間のMySQLクエリ

これは非常に単純に聞こえますが、単純なSELECTステートメントを使用してGMTの現在時刻を返す方法を理解できていません。

CONVERT_TZ() を使用して、サーバーのタイムゾーンとGMTのタイムゾーンに基づいてNOW()をGMTに変換しようとしましたが、何らかの理由でテキストタイムゾーンを入力するとNULLが返されます。私が結果を得る唯一の方法は、実際にオフセットを入力することです。これは、本当に単純な操作であるべきものに対して複雑すぎます。ここに私が意味するものがあります:

mysql> SELECT CONVERT_TZ(NOW(),@@global.system_time_zone,'GMT');
NULL

mysql> SELECT CONVERT_TZ(NOW(),'PST','GMT');
NULL

mysql> SELECT CONVERT_TZ(NOW(),'-08:00','+00:00');
2010-02-13 18:28:22

必要なのは、GMTで現在の時刻を返す簡単なクエリだけです。よろしくお願いします!

25
Russell C.

UTCを使用します(夏時間の影響を受けません)

SELECT UTC_TIMESTAMP();

参照用の古いコンテンツ:

これは動作するはずですが、

SELECT CONVERT_TZ(NOW(),'PST','GMT');

結果としてNULLも取得しました。面白いことに、mysql docuの例もnullを返します

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

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_convert-tz mysqlでバグを見つけたようです。 (+ Stephen Pritchardに感謝)

あなたが試すことができます:

SET @OLD_TIME_ZONE=@@TIME_ZONE;
SET TIME_ZONE='+00:00';
SELECT NOW();
SET TIME_ZONE=@OLD_TIME_ZONE;

okはあなたが望んでいたものではありません(4つのクエリですが、1つだけ選択してください:-)

35
Rufinus

CONVERT_TZ()のバグなし

CONVERT_TZ()を使用するには、タイムゾーンテーブルをインストールする必要があります。そうしないと、MySqlがNULLを返します。

CLIからrootとして次を実行します

#mysql_tzinfo_to_sql/usr/share/zoneinfo | mysql -u root mysql

参照 http://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html

ありがとう

http://www.ArcanaVision.com (SJP 2011-08-18)

13

注:GMTにはDSTが含まれる場合がありますUTCにはDSTがありません

SELECT UTC_TIMESTAMP();

ここでチートシートを作成しました: MySQLのタイムゾーンをUTCに設定する必要がありますか?

12
Timo Huovinen

現在のUTC日時を取得する確実な方法は次のとおりです。

SELECT CONVERT_TZ(NOW(), @@session.time_zone, '+0:00')
5
FrankerZ

ソースサーバーのタイムスタンプは不明であるが、特定のtzの要件がこれである場合:

select convert_tz(utc_timestamp(),'+05:00','+00:00')

これは例としてCSTを使用します。 utc_timestampは、クエリの場所に関係なく、「+ 00:00」という結果を保証します。 「+05:00」は希望するオフセットです。これは、複数の不明なサーバーにアクセスする場合に効果的であり、返される結果がすべて共通のtz結果セットに含まれることを保証します。

0
Mark

これは動作するはずです-タイムゾーンが間違っていると指定されていると思います。例としてシカゴを使用する

SELECT CONVERT_TZ(NOW(), 'America/Chicago', 'GMT')
0
konung

GMT + 6(アジア/ダッカタイムゾーン)のタイムゾーンを検索していました

MySQLサーバーは米国にあります。以下は私のために働いた。

SELECT CONVERT_TZ(UTC_TIMESTAMP()、 '+06:00'、 '+00:00')

上記のすべての回答を見て、PSTに変換するのが信頼できないとわかった後、これを使用しました。

DATE_SUB(user_last_login、間隔7時間)

0
Mauvis Ledford