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
Post a Comment