5

文字列から日付を解析してlong値を取得しようとしています。long値は、後でSQLクエリに送信されます。

これが私のコードです:

String dayDate = "28-02-2013";            
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
Date day = new Date();
try {
    day = sdf.parse(dayDate);
} catch (ParseException pe) {
    pe.printStackTrace();
}
System.out.println("day : "+day.toString()+ "  long : " + day.getTime());

これにより、次の出力が得られます。

day : Thu Feb 28 00:00:00 EET 2013  long : 1362002400000

これは正しいですが、長い値の結果が2013年2月27日水曜日22:00:00 GMT(http://www.epochconverter.com/)になるため、私が望むものではありません(私はGMT + 2タイムゾーンにいます)。そして、長い値を修正するためにSQLに送信する必要があります。

外部ライブラリを使用せずにこれを回避する方法はありますか?

4

5 に答える 5

5

SimpleDateFormatはロケールに対応しています。つまり、解析する日付はタイムゾーン内にあります。GMT + 2の2月28日午前0時は、実際にはGMTの2月27日午後10時、長い値1362002400000です。これを追加して、解析を正しく行います(カレンダーを使用する必要はありません)。

sdf.setTimeZone(TimeZone.getTimeZone("GMT"))

この場合も、この日付を印刷するとSimpleDateFormatが使用されるため、出力にEETが表示されます。

これをデータベースに渡すのは別の話ですが、これを正しく理解すれば。

于 2013-02-15T12:58:33.703 に答える
1

Dateタイムゾーンを明示的に指定せずに、テキストと日付と時刻の内部()表現を変換しています。それは決してうまくいきません

于 2013-02-15T13:03:12.437 に答える
1

GMTをタイムゾーンとして使用DateFormat.setCalendar(Calendar cal)してカレンダーを設定するか、GMTTimeZoneで使用DateFormat.setTimeZone(TimeZone zone)します。これにより、結果の日付はEETではなくGMTで00:00:00になります。

于 2013-02-15T12:56:46.837 に答える
1

文字列にタイムゾーン指定子を追加すると、Javaに変換にGMTを使用させることができます。

String dayDate = "28-02-2013";            
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy z"); // z is a timezone specifier
Date day = new Date();
try {
    day = sdf.parse(dayDate + " GMT"); // Use GMT timezone.
} catch (ParseException pe) {
    pe.printStackTrace();
}
System.out.println("day : "+day.toString()+ "  long : " + day.getTime());
于 2013-02-15T12:59:28.527 に答える
0
Calendar calendar = Calendar.getInstance();
    calendar.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
    Date date = calendar.getTime();

タイムゾーン文字列を使用します。

時間帯

于 2013-02-15T12:58:54.313 に答える