1

ショータイムはすべてイースタンに保存されており、タイムゾーン設定テーブルのIDがあります。タイムゾーン設定テーブルには、Timezone_id、GMTオフセット、およびタイムゾーン名があります。

GMTオフセットは、+ 6、-4、+ 3.5、-4.5などのように保存されます。

元のタイムゾーンに変換されたshowtimeをプルするクエリを作成しようとしています。私はこのようにやっています。

SELECT Date_format( CONVERT_TZ( CONVERT_TZ(A.START_TIME,  '+00:00',  '-5:00'),  
'+00:00',     CONCAT(B.GMT_OFFSET , ':00' )), '%Y-%m-%e %r:%i')  
AS  'start_time' from shows A, tz_settings B AND <<JOINS>>;

ここで行っているのは、最初に時刻をETからGMTに変換してから、GMTオフセットを適用することです。

START_TIMEは、「2012-4-23 10:15:00」のような日付形式です。また、もう1つの問題は、「3.5」などの形式を「3.30」に変換してConvert_TZに渡すことです。

編集:テーブル構造。主なフィールド。

   shows: 'id', 'show_name', 'stat_time', 'tz_id'
   tz_settings: 'tz_id', 'gmt_offset','tz_name'

何か案は?他の機能はミックスに役立ちますか?

4

1 に答える 1

1

あなたが抱えている問題が何であるかは本当にわかりませんが、私はあなたの構造で2つのMYSQLテーブルを作成するだけです。

MySQLテーブル

TABLE shows ['id', 'show_name', 'start_time', 'tz_id']
TABLE tz_settings ['tz_id', 'gmt_offset','tz_name']

そしてこのMySQLクエリで:

SELECT Date_format( CONVERT_TZ( CONVERT_TZ( A.START_TIME, '+00:00', '-5:00' ) , '+00:00', CONCAT( B.GMT_OFFSET, ':00' ) ) , '%Y-%m-%e %r:%i' ) AS 'start_time'
FROM shows A, tz_settings B
WHERE A.id =1
AND B.tz_id = A.tz_id

結果は期待通りでした!


とにかく、クエリを単純化してCONCATを失い、パフォーマンスを向上させるために、GMTオフセットを完全な形式で保存する必要があります。例:+5の代わりに+05:00を保存

これは何らかの形であなたを助けますか?


MYSQLIFを含めて置き換えるように編集

SELECT Date_format( CONVERT_TZ( CONVERT_TZ( A.STAT_TIME, '+00:00', '-5:00' ) , '+00:00', if( B.GMT_OFFSET LIKE '%.5', REPLACE( B.GMT_OFFSET, '.5', ':30' ) , CONCAT( B.GMT_OFFSET, ':00' ) ) ) , '%Y-%m-%e %r:%i' ) AS 'start_time'
FROM shows A, tz_settings B
WHERE A.`id` =1
AND B.`tz_id` = A.`tz_id`

したがって、保存されているGMT OFFSETが.5の場合は、:30に置き換えられます。それ以外の場合は、既存の値に:00が追加されます。(テストされ、期待どおりの値を返します)

于 2012-04-27T20:39:38.627 に答える