2016-04-28 10 views
0

私はテーブルsessionsとdatetimeフィールドstarts_atを持っています。 starts_atはUTCに格納されていますが、私は、ローカルタイムでstarts_atでソートされたセッションをdatetimeではなく時間として返したいと思います。 s2, s1, s3を:私は彼らがこの順序で返さほしいとタイムゾーンを考慮せずにアクティブレコードの注文句でmysql関数を使用する

s1 Jan 1, 13:00 
s2 Jan 2, 11:00 
s3 Jan 1, 23:00 

は、だから私は、日付時刻とのセッションを持っている場合。

今や、現実にはタイムゾーンがutcに2時間を追加すると言うことができるので、現地時間ですべてのutcタイムを取得したいと思います。 s2, s1, s3の順番が間違っています。私たちはs3、s2、s1が必要です。

私は何をしようとしてきたことである:

Session.order("CONVERT_TZ(starts_at,'UTC', '#{tz}')")

tz = Time.now.strftime('%Z')(この前に、私はまた、すべての時間帯にTime.now.zoneを設定

Session.order("TIME(CONVERT_TZ(starts_at,'UTC', '#{tz}'))")

セッションは行われます)

残念ながら、これは私に奇妙なresuを与えていますどのような順番でもないように見えるlts。

答えて

1

私は明示的にあなたがしたいので、この

SELECT *,TIME(starts_at),TIME(CONVERT_TZ(TIME(starts_at),'+00:00', '+2:00')) FROM 
sessions 
ORDER BY TIME(CONVERT_TZ(TIME(starts_at),'+00:00', '+2:00')) 

http://sqlfiddle.com/#!9/1e0ef/8

+0

ありがとうございました! 「UTC」と「PDT」の文字列を渡すように見えますが、何時間も過ぎても問題なく動作しました。 – xxyyxx

1

のような時間数を指定してそれを行うことができました ...多分それは無効だ...あなたのTZがに設定されているかに依存時間と分(日付は無視する)でこれらをソートしますが、最初の項目が真夜中(現地時間)の後になるように、まずローカルタイムゾーンに変換します。

Session.order("HOUR(CONVERT_TZ(starts_at, 'UTC', '#{tz}')), MINUTE(starts_at)") 

現地時間に変換してから時間を抽出することができます。変換することなく分の部分を抽出することができます(分数時間帯がない場合)。

関連する問題