web-dev-qa-db-ja.com

タイムゾーン変換なしで日付を解析する

私はgroovy(正確にはグラフデータベースをトラバースするためのgremlin)を使用しています。残念ながら、私はgremlinを使用しているため、新しいクラスをインポートできません。

Unixタイムスタンプに変換したい日付値がいくつかあります。これらはUTCとして次の形式で保存されます:_2012-11-13 14:00:00:000_

このスニペット(Groovy)を使用して解析しています:

_def newdate = new Date().parse("yyyy-M-d H:m:s:S", '2012-11-13 14:00:00:000')
_

問題は、タイムゾーン変換を実行することです。その結果、次のようになります。

_Tue Nov 13 14:00:00 EST 2012
_

そして、それをtime()を使用してタイムスタンプに変換すると、UTCに変換され、タイムスタンプが生成されます。

日付が最初に解析されるときにタイムゾーン変換を行わないようにnew Date()を取得するにはどうすればよいですか(日付をUTCと見なすだけです)。

12
F21

Javaでそれを行う2つの方法があります:

/*
 *  Add the TimeZone info to the end of the date:
 */

String dateString = "2012-11-13 14:00:00:000";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-d H:m:s:S Z");
Date theDate = sdf.parse(dateString + " UTC");

/*
 *  Use SimpleDateFormat.setTimeZone()
 */

String dateString = "2012-11-13 14:00:00:000";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-d H:m:s:S");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Date theDate = sdf.parse(dateString);

Date.parse()は非推奨であることに注意してください(したがって、私はそれをお勧めしませんでした)。

15
jahroy