私はこのコードを持っています:
Calendar cal = Calendar.getInstance();
cal.setTime(pDatum);
cal.set(Calendar.HOUR_OF_DAY, Integer.valueOf(pHHMMTP.substring(0, 2)));
cal.set(Calendar.MINUTE, Integer.valueOf(pHHMMTP.substring(2, 4)));
cal.set(Calendar.MILLISECOND, 0);
System.out.println(cal.getTime());
どこで pDatum
は Sun Mar 27 00:00:00 CET 2016
, pHHMMTP
は 02485
そして pHHMMTP.substring(0, 2)
は 02
.
出力は次のとおりです。
日3月27日03:48:00 CEST 2016
私は期待する:
日3月27日02:48:00 CEST 2016
まず私はそれが TimeZone
問題がありますが、このコードで私は同じ出力を得ます:
Calendar cal = Calendar.getInstance();
TimeZone tz = TimeZone.getTimeZone("GMT");
cal.setTimeZone(tz);
cal.setTime(pDatum);
cal.set(Calendar.HOUR_OF_DAY, Integer.valueOf(pHHMMTP.substring(0, 2)));
cal.set(Calendar.MINUTE, Integer.valueOf(pHHMMTP.substring(2, 4)));
cal.set(Calendar.MILLISECOND, 0);
あなたは私の問題を見ますか?
回答:
回答№1は2CETの意味 中央ヨーロッパのタイムゾーン。ヨーロッパでは、 夏時間.
基本的に、冬は1時間から時間がずれます。 実用的な理由(実際には睡眠の質)のため、時間の切り替えは2016年3月27日の春の第一日曜日に行われます。午前3時、つまり時計は次のようにカウントダウンします。 01:58
, 01:59
, 03:00
, 03:01
。これの意味は、 Sun Mar 27 02:48:00 CET 2016
存在しない.
結果として、あなたがあなたのコードを実行するならば Sun Mar 27
、あなたは 03:48
あなたがそれを実行した場合 Mon Mar 28
、あなたは 02:48
.
両方の日付で試してください。
//Date date = new SimpleDateFormat("dd/MM/yyyy z").parse("27/03/2016 CET");
Date date = new SimpleDateFormat("dd/MM/yyyy z").parse("28/03/2016 CET");
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY, 2);
cal.set(Calendar.MINUTE, 48);
cal.set(Calendar.MILLISECOND, 0);
System.out.println(cal.getTime());
出力:
月Mar 28 02:48:00 CEST 2016
回答№2の場合は1
これは「タイムゾーンの問題です、あなたは」GMTでカレンダーを作成していますが、CESTゾーンで日付を表示しています。
編集:
同じタイムゾーンで日付が表示されたら、それで大丈夫です。
Calendar cal = Calendar.getInstance();
TimeZone tz = TimeZone.getTimeZone("GMT");
cal.setTimeZone(tz);
cal.set(Calendar.HOUR_OF_DAY, 2);
cal.set(Calendar.MINUTE, 48);
cal.set(Calendar.MILLISECOND, 0);
System.out.println(cal.getTime()); // <-- System default Zone
DateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
formatter.setTimeZone(tz);
System.out.print(formatter.format(cal.getTime())); // <-- Same TimeZone
出力:
Tue Mar 22 03:48:06 CET 2016
Tue Mar 22 02:48:06 GMT 2016