java - tz.inDaylightTime(new Date()) returning true for timezone GMT+8 for ID:- Asia/Choibalsan which is wrong -


problem timezone:-beijing,chongqing,hong kong,urumqi (gmt 8)

in debug getting ids above time zone :-[antarctica/casey, asia/brunei, asia/chita, asia/choibalsan, asia/chongqing, asia/chungking, asia/harbin, asia/hong_kong, asia/irkutsk, asia/kuala_lumpur, asia/kuching, asia/macao, asia/macau, asia/makassar, asia/manila, asia/shanghai, asia/singapore, asia/taipei, asia/ujung_pandang, asia/ulaanbaatar, asia/ulan_bator, australia/perth, australia/west, ctt, etc/gmt-8, hongkong, prc, singapore]

problem:-tz.indaylighttime(new date()) returning true id asia/choibalsan , giving 3600000 daylight difference. because of showing time 1 hour ahead hongkong user.because adding 3600000 day light saving difference

which wrong because daylight saving in no hong-kong time zone. "tz.indaylighttime()" should return false here.

this isssue coming on production on linux server, jdk8.

it working on local system on windows jdk8.

my code reference:-

public static string setdatetimeintimezone(date date, string usertimezone) {     int offset = parsetimezone(usertimezone);     dateformat formatter = new simpledateformat("mm/dd/yyyy hh:mm:ss");      int timezonedstsaving = 0;     string[] timearray = timezone.getavailableids(offset);     timezone tz=null;     (int = 0; < timearray.length; i++) {         tz = timezone.gettimezone(timearray[i]);         if (tz.indaylighttime(new date())) {             timezonedstsaving = tz.getdstsavings();         }         if (timezonedstsaving != 0) {             break;         }     }     //formatter.settimezone(tz);     return formatter.format(new date(date.gettime() + offset + timezonedstsaving)); }  public static int parsetimezone(string usertimezone) {     // represent gmt string used display user time zone.     final string gmtstringconstant = gmt_offset_string;     // represent 60 minute in hour.     final int minutes = 60;     // represent 60 seconds in minute.     final int seconds = 60;     // represent 1000 milli seconds in second.     final int milliseconds = 1000;     int timezonedifference = 0;     int gmtindex = usertimezone.indexof(gmtstringconstant);     // if "(gmt" string not found in timezone, return 0.     if (gmtindex == -1) {         return timezonedifference;     }     string timezone = usertimezone.substring(gmtindex + gmtstringconstant.length(), usertimezone.length() - 1);     int indexofcolon = timezone.indexof(":");     if (indexofcolon != -1) {         int hourdiff = integer.parseint(timezone.substring(0, indexofcolon)) * minutes * seconds * milliseconds;         int mindiff = integer.parseint(timezone.substring(indexofcolon + 1)) * seconds * milliseconds;         if (hourdiff < 0) {             mindiff *= -1;         }         timezonedifference = hourdiff + mindiff;     } else {         timezonedifference = integer.parseint(timezone) * minutes * seconds * milliseconds;     }     return timezonedifference; } 

note : dont want use zodatime want handle util date only


Comments