次のコードは、unecpected動作を生成します。 私は(この場合は1469008800000
を)終わりgetTimeInMillis
に同じ値を返す両方Calendar
期待してい彼らはequal
をしなければなりません。 - しかし、彼らは...setTimeZoneを使用した後にカレンダーを修正するにはどうすればよいですか?
をしない私は、これはhttp://bugs.java.com/bugdatabase/view_bug.do?bug_id=4827490を行うにはsomethigがあると思いますが、時間帯を変更した後、我々はしなければならない」(「AROUND WORK」として掲載されget
setTimeZone
後does'nt変更何かを呼び出しますいくつかのreadメソッドを呼び出す」)...
それともれる 『間違っ一つ』 AROUND WORKはsetTimeZone
を使用して前にいくつかのget
方法を呼び出す必要がありますか?
Calendar calendar1 = Calendar.getInstance(TimeZone.getTimeZone("CET"));
Calendar calendar2 = Calendar.getInstance(TimeZone.getTimeZone("CET"));
calendar1.set(2016, 07 - 1, 20, 12, 00, 0);
calendar2.set(2016, 07 - 1, 20, 12, 00, 0);
calendar1.set(Calendar.MILLISECOND, 0);
calendar2.set(Calendar.MILLISECOND, 0);
System.out.println("creation: " + calendar1.equals(calendar2));
System.out.println(calendar1.getTimeInMillis());
System.out.println("get: " + calendar1.equals(calendar2));
calendar1.setTimeZone(TimeZone.getTimeZone("Z"));
calendar2.setTimeZone(TimeZone.getTimeZone("Z"));
System.out.println("setTimeZone: " + calendar1.equals(calendar2));
calendar1.get(Calendar.YEAR);
calendar2.get(Calendar.YEAR);
System.out.println("get: " + calendar1.equals(calendar2));
System.out.println();
System.out.println(calendar1.getTimeInMillis());
System.out.println(calendar2.getTimeInMillis());
System.out.println("end: " + calendar1.equals(calendar2));
出力:
creation: true
1469008800000
get: true
setTimeZone: false
get: false
1469008800000
1469016000000
end: false
これらの値の違いは分かりましたか? 7200000msは2時間ほどです。 – eldo
@CMax:6行目の後に両方のカレンダーが等しい... –
申し訳ありませんが、現時点では私の答えはトピックではありませんが、どんな種類のバグもなく、2つの値が等しい違いははるかに小さいはずです。 – CMax