15

私は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 と見なすだけです)。

4

3 に答える 3

19

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()は非推奨であることに注意してください(そのため、お勧めしませんでした)。

于 2012-11-15T02:27:08.417 に答える
0

タイムゾーンの変換を避けるために Calendar を使用しました。new Date() は使用しませんでしたが、結果は同じです。

String dateString = "2012-11-13 14:00:00:000";
Calendar calendar = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-d H:m:s:S");
calendar.setTime(sdf.parse(dateString));
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = calendar.getTime();
于 2021-06-30T14:54:27.497 に答える
-1

Date クラス parse(String str) は JDK 1.1 から廃止されました。TimeZone および Locale 設定もサポートする SimpleDateFormat クラスを試してください。

于 2012-11-15T02:22:33.403 に答える