1

MySQL InnoDB データベースから取得startDateした型で呼び出されるフィールドがあります。TIMESTAMP

SELECT startDate FROM jn.all WHERE id IN(115)

=> 2012-07-28 00:00:00

Javaで私は:

java.util.Date d = resultSet.getDate("startDate");
SimpleDateFormat tsmpFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
tsmpFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(tsmpFormatter.format(d));

私は得る:

=>2012-07-28 04:00:00

UTC から EST までは 4 時間です。データベース時間は UTC です。

SELECT now();

=> 2013-07-29 21:46:26

私の現在のEST時間は17:46:26ですが

どこでも UTC を使用しているにもかかわらず、この 4 時間の差が生じるのはなぜですか? ありがとう!

編集:

私は問題を見つけたかもしれません。

http://dev.mysql.com/doc/refman/5.1/en/datetime.html

MySQL converts TIMESTAMP values from the current time zone to UTC for storage, and back from UTC to the current time zone for retrieval. (This does not occur for other types such as DATETIME.)

しかし、これは何current time zoneですか?サーバーは UTC である必要があります。

4

4 に答える 4

2

申し訳ありませんが、私自身の答えを見つけました。この解決策は私にはばかげているように見えますが、何ができますか。

結果セットからデータを取得するときに Calendar を渡す必要がありました。

Date begin = resultSet.getDate("startDate", new GregorianCalendar(TimeZone.getTimeZone("UTC")));
于 2013-07-29T22:06:18.433 に答える
0

java.util.date を使用する前に、デフォルトのタイムゾーンに注意する必要があります。あなたのコードは次のようになります:

    ...
    TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
    ...
    java.util.Date d = resultSet.getDate("mvStartDate");
    SimpleDateFormat tsmpFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    tsmpFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));
    System.out.println(tsmpFormatter.format(d));
    ...
于 2013-07-29T22:59:22.033 に答える
0

すでに他の場所でこれを読んでいると思いますが、タイムゾーンを認識し、それらを無視するかどうかを選択できるJoda Timeを検討することを検討してください。

始めるには少し精神的な投資が必要ですが、柔軟性とパワーの点で価値があります。

于 2013-07-29T22:04:30.447 に答える
0

使用してみてください:

java.sql.Timestamp ts = resultSet.getTimestamp("mvStartDate");

resultSet.getDate()Java を返します。sql .Date であり、Java ではありません。ユーティリティ.Date

ジャバ付き。util .Date で時刻情報を取得します。

于 2013-07-29T21:48:02.690 に答える