3

scala プログラムでは、クライアント側から特定の日付を受け取ります。

2013-10-20T23:59:59.999Z

DBに保存するときにこの日付を保持し、ローカルに変換したくないので、次の行:

debug("--sql timestamp: " + new Timestamp(reading.timestamp.getMillis()))

プリントアウトしています:(2013-10-21 02:59:59.999私はルーマニアにいます)。

タイムゾーンを無視する方法はありますか?

4

2 に答える 2

2

2013-10-20T23:59:59.999Z2013-10-21 02:59:59.999は実際には同じ時間です:2013-10-20T23:59:59.999ZUTC タイム ゾーン (Z)ですが、2 番目のタイム ゾーンは相対的であり、ローカル タイム ゾーン (ルーマニアでは UTC+3) として表されます。

PostgreSQL では、タイムスタンプをTIMESTAMP WITH TIME ZONE( TIMESTAMPTZ) としてデータベースに保存して、これを処理する必要があります。後で選択したタイム ゾーン (UTC など) でいつでも印刷できます。(ストレージ タイプが重要な理由を理解するには、この最近の質問に興味があるかもしれません。)

タイムスタンプを UTC/Z タイム ゾーンで再度出力したい場合は、new DateTime(millis, DateTimeZone.UTC)(Joda Time を使用して) 役立つはずです。

于 2013-10-12T13:41:57.657 に答える
2

これがTimestamp.toString()振る舞いです。java.sql.Timestampextendsjava.util.DateおよびそのtoString()メソッドでは、特に を使用します。super.getHours()これは、 javadoc によると、ローカルタイムゾーンで解釈された時間を返します-観察したとおりです。

ただし、内部的Timestampには正しいタイムスタンプ値を保持しています。ただし、データベースへの保存に問題がある場合があります。この回答を参照してください。

于 2013-10-12T13:06:41.277 に答える