2016-07-20 8 views
1

次のコードは、unecpected動作を生成します。 私は(この場合は1469008800000を)終わりgetTimeInMillisに同じ値を返す両方Calendar期待してい彼らはequalをしなければなりません。 - しかし、彼らは...setTimeZoneを使用した後にカレンダーを修正するにはどうすればよいですか?

をしない私は、これはhttp://bugs.java.com/bugdatabase/view_bug.do?bug_id=4827490を行うにはsomethigがあると思いますが、時間帯を変更した後、我々はしなければならない」(「AROUND WORK」として掲載されgetsetTimeZone後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 

答えて

0

は、私はあなたが提供するコードでは、あなたが1つのコールから他のscince時間にまったく同じ表現に両方のカレンダーが、Calendar.MILISECONDS変更値を設定することを指摘する可能性があり2つのコールの間を通過します。

2番目のカレンダーを最初のカレンダーに設定した場合は、Calendar.MILISECONDSに設定するのではなく、大丈夫です。

編集:質問が編集された後、私の答えはもはや関連性がなくなり、私はそのコメントセクションを保持する唯一の目的のためにそれを保持しています。

+0

これらの値の違いは分かりましたか? 7200000msは2時間ほどです。 – eldo

+0

@CMax:6行目の後に両方のカレンダーが等しい... –

+0

申し訳ありませんが、現時点では私の答えはトピックではありませんが、どんな種類のバグもなく、2つの値が等しい違いははるかに小さいはずです。 – CMax

関連する問題