JDK-8067758 : Invalid default TimeZone for 'Europe/Minsk'
  • Type: Bug
  • Component: core-libs
  • Sub-Component: java.util:i18n
  • Affected Version: 7u67
  • Priority: P4
  • Status: Resolved
  • Resolution: Duplicate
  • OS: windows_7
  • CPU: x86_64
  • Submitted: 2014-12-11
  • Updated: 2015-02-11
  • Resolved: 2015-02-11
Related Reports
Duplicate :  
Description
FULL PRODUCT VERSION :
java -version
java version "1.7.0_67"
Java(TM) SE Runtime Environment (build 1.7.0_67-b01)
Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)

javac -version
javac 1.7.0_67

ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows [Version 6.1.7601]

EXTRA RELEVANT SYSTEM CONFIGURATION :
System settings:
Location=Belarus
User interface language=English
System TimeZone=(UTC+03:00) Minsk
User environment variable JAVA_OPTS=-Duser.timezone=Europe/Minsk


A DESCRIPTION OF THE PROBLEM :
Invalid time and timezone displayed for Belarus location and Minsk timezone (UTC+03). JAVA_OPTS with -Duser.timezone=Europe/Minsk does not help. 
The latest timezone update is installed and does not help:

D:\soft\Java Time zone update\tzupdater-1.4.9-2014i>java -jar tzupdater.jar -V
tzupdater version 1.4.9-b01
JRE time zone data version: tzdata2014i
Embedded time zone data version: tzdata2014i

D:\soft\Java Time zone update\tzupdater-1.4.9-2014i>java -jar tzupdater.jar -u
You have the same version as the embedded one.

I found a report for a similar bug in Java 1.6 and it is still unresolved: http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8017129

Also there is an incorrect user.country property returned by System.getProperty("user.country").

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. Use display language = English
2. Go to Control Panel -> Clock, Language, and Region -> Region and Language -> Location tab -> choose Belarus
3. Go to Control Panel -> Clock, Language, and Region -> Region and Language -> Formats tab -> choose Format to English (United States)
4. Set Windows setting Timezone to (UTC+03:00) Minsk
5. Install latest timezone Windows update
6. Install latest timezone patch for Java (tzupdater-1.4.9-2014i)
7. Use in Java Calendar.getInstance() and enjoy


EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Expected Europe/Minsk timezone, Belarus country and date and time:  Thu Dec 11 12:38:58 FET 2014
ACTUAL -
America/Bahia timezone ID
country=US
TimeZone=Brasilia Time or just BRT

Here below is output for provided source code:

java.util.GregorianCalendar[time=1418287138531,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="America/Bahia",offset=-10800000,dstSavings=0,useDaylight=false,transitions=63,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2014,MONTH=11,WEEK_OF_YEAR=50,WEEK_OF_MONTH=2,DAY_OF_MONTH=11,DAY_OF_YEAR=345,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=2,AM_PM=0,HOUR=5,HOUR_OF_DAY=5,MINUTE=38,SECOND=58,MILLISECOND=531,ZONE_OFFSET=-10800000,DST_OFFSET=0]

Thu Dec 11 05:38:58 BRT 2014

sun.util.calendar.ZoneInfo[id="America/Bahia",offset=-10800000,dstSavings=0,useDaylight=false,transitions=63,lastRule=null]

Brasilia Time

America/Bahia

US


REPRODUCIBILITY :
This bug can be reproduced always.

---------- BEGIN SOURCE ----------
System.out.println(Calendar.getInstance());
System.out.println(Calendar.getInstance().getTime());
System.out.println(Calendar.getInstance().getTimeZone());        System.out.println(Calendar.getInstance().getTimeZone().getDisplayName());
System.out.println(System.getProperty("user.timezone"));
System.out.println(System.getProperty("user.country"));
---------- END SOURCE ----------

CUSTOMER SUBMITTED WORKAROUND :
Using -Duser.timezone=Europe/Minsk command line argument gives expected timezone info, but user.country property is still incorrect:

java.util.GregorianCalendar[time=1418287518895,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Europe/Minsk",offset=10800000,dstSavings=0,useDaylight=false,transitions=69,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2014,MONTH=11,WEEK_OF_YEAR=50,WEEK_OF_MONTH=2,DAY_OF_MONTH=11,DAY_OF_YEAR=345,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=2,AM_PM=0,HOUR=11,HOUR_OF_DAY=11,MINUTE=45,SECOND=18,MILLISECOND=895,ZONE_OFFSET=10800000,DST_OFFSET=0]

Thu Dec 11 11:45:18 FET 2014

sun.util.calendar.ZoneInfo[id="Europe/Minsk",offset=10800000,dstSavings=0,useDaylight=false,transitions=69,lastRule=null]

Further-eastern European Time

Europe/Minsk

US

Also possible use System.setProperty("user.timezone", "Europe/Minsk"), but before Calendar.getInstance() call.


Comments
dup of 7111903
11-02-2015

Tested with JDK 7u72 and 8u25 and couldn't reproduce. Confirming fixed for 8u25 and 7u72.
17-12-2014

Looks like a duplicate of JDK-8017129 as stated in the report but need to be confirmed.
16-12-2014