scala プログラムでは、クライアント側から特定の日付を受け取ります。
2013-10-20T23:59:59.999Z
DBに保存するときにこの日付を保持し、ローカルに変換したくないので、次の行:
debug("--sql timestamp: " + new Timestamp(reading.timestamp.getMillis()))
プリントアウトしています:(2013-10-21 02:59:59.999私はルーマニアにいます)。
タイムゾーンを無視する方法はありますか?
scala プログラムでは、クライアント側から特定の日付を受け取ります。
2013-10-20T23:59:59.999Z
DBに保存するときにこの日付を保持し、ローカルに変換したくないので、次の行:
debug("--sql timestamp: " + new Timestamp(reading.timestamp.getMillis()))
プリントアウトしています:(2013-10-21 02:59:59.999私はルーマニアにいます)。
タイムゾーンを無視する方法はありますか?
2013-10-20T23:59:59.999Zと2013-10-21 02:59:59.999は実際には同じ時間です:2013-10-20T23:59:59.999ZはUTC タイム ゾーン (Z)ですが、2 番目のタイム ゾーンは相対的であり、ローカル タイム ゾーン (ルーマニアでは UTC+3) として表されます。
PostgreSQL では、タイムスタンプをTIMESTAMP WITH TIME ZONE( TIMESTAMPTZ) としてデータベースに保存して、これを処理する必要があります。後で選択したタイム ゾーン (UTC など) でいつでも印刷できます。(ストレージ タイプが重要な理由を理解するには、この最近の質問に興味があるかもしれません。)
タイムスタンプを UTC/Z タイム ゾーンで再度出力したい場合は、new DateTime(millis, DateTimeZone.UTC)(Joda Time を使用して) 役立つはずです。
これがTimestamp.toString()振る舞いです。java.sql.Timestampextendsjava.util.DateおよびそのtoString()メソッドでは、特に を使用します。super.getHours()これは、 javadoc によると、ローカルタイムゾーンで解釈された時間を返します-観察したとおりです。
ただし、内部的Timestampには正しいタイムスタンプ値を保持しています。ただし、データベースへの保存に問題がある場合があります。この回答を参照してください。