2017-10-12 4 views
0

自分のプログラムにIntelliJを使用しています(私はKotlinとJava言語を使用しています)、データベースからのクエリを使用してレポートを取得しようとしています。私は結果を見るために郵便番号を使用しています)。私のコードをデバッグし、クエリの結果を調べると、タイムゾーンは私が望む方法のようにOKです - それは偶然のショー-7(私とUTCとの違いの時間)ですが、ブラウザ(Postmanたとえば、 "date": "2017-10-12T15:00:33.000 + 0007")ではなく、UTC時刻と+0000を表示します(「日付」:「2017-10-12T15:00:33.000 + 0000」)。 私は多くのオプションを試して、解決策を見つけるのに6時間ほどかかりましたが、何も効果がありません。 助けてくれてありがとうTimeZoneが表示されない

答えて

0

PostgresはTIMESTAMP WITH TIME ZONEUTCに保存し、それを使って渡されたゾーンを捨てて調整します。これはPostgres固有の動作であることに注意してください。データベースは日時の処理が大きく異なり、SQL仕様はほとんど問題に触れません。

Marloweがコメントしたように、データ入力から取得したタイムゾーンを覚えておく必要がある場合は、別の列に保存する必要があります。 America/Montreal,Africa/Casablanca、またはPacific/Aucklandのようなcontinent/regionの形式でproper time zone nameをキャプチャします。 ESTまたはISTのような3〜4文字の略語は、ではなく、で、標準化されておらず、ユニークではありません(!)ので絶対に使用しないでください。

➠こんな感じです:pgAdminなどの対話型ツールのPostgresセッションは、UTC値を取得した後にデフォルトのタイムゾーンを動的に適用します。善意ではあるが、これは私の意見では、記憶されたデータの真の性質を覆い隠すので、反機能である。

最新のjava.timeクラスを使用してUTCで値を取得します。

Instant instant = myResultSet.getObject(… , Instant.class) ; 

希望のタイムゾーンに調整します。

ZoneId z = ZoneId.of("Asia/Kolkata") ; 
ZonedDateTime zdt = instant.atZone(z) ; 

DateTimeFormatterクラスを使用してWebブラウザ用の文字列を生成します。そこに自動ローカライゼーション機能があることに注意してください。

これはすべてStack Overflowで何度もカバーされています。詳細については、検索をクリックしてください。

+0

あなたの答えに感謝します。私はあなたのソリューションを使用することはできませんので、私はKotlinを使用しているので、私は前に何か似たようなものを試しましたが、成功しませんでした –

+0

@ TalShaniそれは問題ではありません。 Kotlinは完全にJava相互運用が可能です。実際、JavaコードをIntelliJにコピー&ペーストすれば、それをKotlinに変換することができます。 – Moira

+0

@ 1blustoneええ私は知っているが、それでもデータが正しいのは何故か私がタイムゾーンを修正した後でもうまくいきませんが、2度目にブラウザに行くはずです。 –

0

ソリューション:ので、私はここで私の問題への解決策が見つかりました:まもなくで Overriding BeanPropertyRowMapper to Support JodaTime DateTime

を私はジョダの日時にそれを変更した結果を包んだので、タイムスタンプの種類は、タイムゾーンとうまく動作しません。衣装を着たBeanによる質問(投稿したリンクから)

関連する問題