2016-10-12 3 views
0

サーバの時刻を「Central Daylight Time」のタイムゾーンでUnixタイムスタンプとして保存しています。したがって、order_dateはサーバーの時刻です。私が必要なのは、それを韓国の時代に変換することです。以下は私が使った質問です。mysqlの時刻を別のタイムゾーンに変換する

SELECT 
    `order_date`, 
    FROM_UNIXTIME(`order_date`), 
    CONVERT_TZ(FROM_UNIXTIME(order_date), 'US/Central', 'Asia/Seoul') 
FROM 
    my_orders 
WHERE order_id="123" 

これにより、変換された日付の結果はnullになります。 CONVERT_TZパラメータで変更する必要はありますか?それとも、これのための他のより良い方法がありますか?

+0

を参照することができ、私は、あまりにもCONVERT_TZ(FROM_UNIXTIME(o.mdate)、 'CDT'、 'KST')を試してみました。しかし、まだNULLの結果。 – Thejas

+0

私の問題は、タイムゾーンテーブルがmysqlにロードされていないと思います。 – Thejas

答えて

2

クエリのタイムスタンプを手動で変換するのではなく、MySQLのtimestampタイプとして保存し、データベースにアクセスするために使用しているAPIのネイティブタイムスタンプサポートを使用します。 (JDBCでは、たとえば、ResultSet.getTimestampメソッドを使用します)。これは、データベース内のタイムゾーンの問題を自動的に処理し、アプリケーションにタイムスタンプオブジェクトを与え、必要な時間帯に表示できます。

タイムゾーンはプレゼンテーションの問題です。データベースはタイムスタンプを特定のタイムゾーンにフォーマットするべきではありません。アプリケーションがそのようにします。

+0

サードパーティアプリケーションであるグリッドを作成するためにクエリを渡す必要があります。そこで私はタイムゾーンの変更オプションを見つけることができません。私の問題は、タイムゾーンテーブルがmysqlにロードされていないと思う。 – Thejas

2

試してみて、MySQLのコードではなく、PHPコードを使用して時間を変換してください。

オブジェクト指向型

<?php 
$date = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru')); 
echo $date->format('Y-m-d H:i:sP') . "\n"; 

$date->setTimezone(new DateTimeZone('Pacific/Chatham')); 
echo $date->format('Y-m-d H:i:sP') . "\n"; 
?> 

手続き型

<?php 
$date = date_create('2000-01-01', timezone_open('Pacific/Nauru')); 
echo date_format($date, 'Y-m-d H:i:sP') . "\n"; 

date_timezone_set($date, timezone_open('Pacific/Chatham')); 
echo date_format($date, 'Y-m-d H:i:sP') . "\n"; 
?> 

上記の例の出力は以下となります。

2000-01-01 00:00:00 + 12:00

2000-01-01 01:45:00 + 13:45

+0

サードパーティアプリケーションであるグリッドを作成するためにクエリを渡す必要があります。そこで私はタイムゾーンの変更オプションを見つけることができません。私の問題は、タイムゾーンテーブルがmysqlにロードされていないと思う。 – Thejas

+0

これはphpが入ってくる場所か、あなたのコードでphpを使っていないのですか? –

3

以下の回答がお役に立てば幸いです。このYour_Offset = ":30 +5" において

CONVERT_TZ(Date_Column,"+00:00",Your_Offset) 

(5:30:30 GST + 5ためインドのためのものです)。

あなたはまた、this link

関連する問題