8229471: Calendar under a specific timezone changes HOUR field when MILLISECOND field is changed
Yano, Masanori
yano-masanori at jp.fujitsu.com
Thu Sep 12 07:16:15 UTC 2019
Hello.
I think JDK-8229471 occurs because a change of TimeZone is not considered in getTime().
To resolve this problem, isTimeSet flag must be set to false when setTimeZone() is called.
Please review the following change.
diff -r e1269de19aa5 src/java.base/share/classes/java/util/Calendar.java
--- a/src/java.base/share/classes/java/util/Calendar.java Thu Aug 22 14:09:36 2019 -0700
+++ b/src/java.base/share/classes/java/util/Calendar.java Thu Sep 12 11:45:37 2019 +0900
@@ -2901,7 +2901,7 @@
* generally, a call to setTimeZone() affects calls to set() BEFORE AND
* AFTER it up to the next call to complete().
*/
- areAllFieldsSet = areFieldsSet = false;
+ isTimeSet = areAllFieldsSet = areFieldsSet = false;
}
/**
diff -r e1269de19aa5 test/jdk/java/util/Calendar/Bug8229471.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/Calendar/Bug8229471.java Thu Sep 12 11:45:37 2019 +0900
@@ -0,0 +1,22 @@
+/*
+ *@test
+ *@bug 8229471
+ *@summary test for recompute when Calendar.setTimeZone()
+ */
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Locale;
+import java.util.TimeZone;
+
+public class Bug8229471 {
+ public static void main(String[] args) throws Exception {
+ Calendar calendar = Calendar.getInstance(new Locale("en", "US"));
+ Date date1 = calendar.getTime();
+ calendar.setTimeZone(TimeZone.getTimeZone("Europe/Budapest"));
+ Date date2 = calendar.getTime();
+ if (date1.equals(date2)) {
+ throw new RuntimeException("Bug8229471: failed. TimeZone is not applied.");
+ }
+ }
+}
Regards,
Masanori Yano
More information about the core-libs-dev
mailing list