2

次のコード セグメントは、Joda-Time API を使用して日付をフォーマットし、UTC ゾーンに変換します。

DateTimeFormatter dateTimeFormatter=DateTimeFormat.forPattern("dd-MMM-yyyy hh:mm:ss aa");
DateTime dateTime = dateTimeFormatter.parseDateTime("15-Oct-2013 11:34:26 AM").withZone(DateTimeZone.UTC);        
System.out.println(dateTime);

次の日付が期待どおりに正確に表示されます。

2013-10-15T06:04:26.000Z

しかし、この日付をjava.sql.Timestampそのように変換すると、

System.out.println(new Timestamp(dateTime.getMillis()));

次の日付が表示されます。

2013-10-15 11:34:26.0

これは、与えられたのと同じ日付/時刻を意味します。タイムゾーン UTC は無視されているようです。


Timestamp日付を UTC に正しく変換するにはどうすればよいですか?

4

2 に答える 2

1

JavaTimestamp.toString()は UTC で出力します (javadoc にはあまり記載されていませんが、ソースは TimeZone 情報を使用していません)。元の日付/時刻は UTC であるため、まったく同じ出力が表示されます。

于 2013-10-15T04:06:51.807 に答える
0

println()このメソッドはコンソールにメソッドを表示するときにメソッドを暗黙的に使用Timestamp#toString()し、現在の JVM タイムゾーンを使用して日時を表示するという事実にもかかわらず(JVM タイムゾーンは、オペレーティング システムが使用するデフォルトのシステム タイムゾーンです)、元の意図は問題は、UTC ゾーンを使用しnew Timestamp(dateTime.getMillis())て MySQL データベースに永続化することでした。これは、次の関連する回答に記載されている理由により発生しません。

于 2016-01-11T20:00:34.220 に答える