TimeZone.getTimeZone("CST") returns GMT
Solution 1
From the javadoc for getTimeZone:
Returns a TimeZone corresponding to the given id, or GMT for unknown ids.
An ID can be an Olson name of the form Area/Location, such as America/Los_Angeles.
The getAvailableIDs() method returns the supported names.
Try using getAvailableIDs?
Solution 2
You can use "CST6CDT" Timezone it will automatically provide you the correct time when the Central Daylight Time (CDT) switched back to CST or vice versa.
Solution 3
The following seems to have worked for me as was facing similar issues:
Calendar c = Calendar.getInstance(TimeZone.getTimeZone("America/Chicago"));
Solution 4
The following code helped me.
TimeZone tzone = TimeZone.getTimeZone("Singapore");
// set time zone to default
tzone.setDefault(tzone);
Solution 5
for any date time conversion i would suggest using JODA date time, its help me solve a bunch of date time issues.
you can initialize a date with a time zone, and convert between them very easily
DateTimeZone zone = DateTimeZone.forID("Europe/London");
or
DateTimeZone zoneUTC = DateTimeZone.UTC;
from JODA DATE TIME API
DateTime(DateTimeZone zone)
Constructs an instance set to the current system millisecond time using ISOChronology in the specified time zone.
Comments
-
Arch1tect about 4 years
I'm converting time from CST to local time but
getTimeZone
doesn't seem to work properly.String cstTime = "2013-06-21 14:00:00"; SimpleDateFormat simpleDateFormat = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); simpleDateFormat.setTimeZone(TimeZone.getTimeZone("CST")); Date date = null; try { date = simpleDateFormat.parse(cstTime); } catch (ParseException e) { System.out.println("Parse time error"); e.printStackTrace(); } TimeZone destTz = TimeZone.getDefault();//here I should get EDT on my phone simpleDateFormat.setTimeZone(destTz); String convertedLocalTime = simpleDateFormat.format(date); //the converted time I get is "2013-06-21 10:00:00" //but it should be "2013-06-21 15:00:00"
It seems to be using GMT instead of CST and below is what I got when debugging:
String abc = TimeZone.getTimeZone("CST").toString(); System.out.println("CST:"+abc); Output: I/System.out(19404): CST:java.util.SimpleTimeZone[id=GMT,offset=0,dstSavings=3600000, useDaylight=false,startYear=0,startMode=0,startMonth=0,startDay=0,startDayOfWeek=0, startTime=0,endMode=0,endMonth=0,endDay=0,endDayOfWeek=0,endTime=0]
Is it using GMT? why.. Thanks in advance!
Edit:
Finally got it work by using
simpleDateFormat.setTimeZone(TimeZone.getTimeZone( "GMT-5")); //GMT-5 is for CDT, I found my server is actually using CDT not CST
Still don't know why using the string "CST" can't work...
-
kosa almost 11 yearsDon't use short names for TimeZone always use long names. EST could be Eastern Standard Time as well as some other timezone
-
Raghunandan almost 11 yearsstackoverflow.com/questions/2407719/…. might help
-
Arch1tect almost 11 years@Nambari tried "Central Standard Time" still get GMT...
-
kosa almost 11 yearsto get EST, in general we use America/New_York, see if you have anything like this in Timezone database.
-
Matt Johnson-Pint almost 11 yearsUS Central Standard Time should usually be specified as
America/Chicago
. Don't passGMT-5
or you're not going to get the proper adjustments when transitioning from CST to CDT. -
user55926 about 9 yearsstackoverflow.com/questions/9429357/… this should solve your problem
-
-
Planky almost 10 yearsCST is in the list
TimeZone.getAvailableIDs()
returns