TimeZone.getTimeZone("CST") returns GMT

49,774

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.
Share:
49,774
Arch1tect
Author by

Arch1tect

sup

Updated on March 31, 2020

Comments

  • Arch1tect
    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=fals‌​e,startYear=0,startMode=0,startMonth=0,startDay=0,startDayOfWeek=0,
    startTime=0,en‌​dMode=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
      kosa almost 11 years
      Don't use short names for TimeZone always use long names. EST could be Eastern Standard Time as well as some other timezone
    • Raghunandan
      Raghunandan almost 11 years
    • Arch1tect
      Arch1tect almost 11 years
      @Nambari tried "Central Standard Time" still get GMT...
    • kosa
      kosa almost 11 years
      to get EST, in general we use America/New_York, see if you have anything like this in Timezone database.
    • Matt Johnson-Pint
      Matt Johnson-Pint almost 11 years
      US Central Standard Time should usually be specified as America/Chicago. Don't pass GMT-5 or you're not going to get the proper adjustments when transitioning from CST to CDT.
    • user55926
      user55926 about 9 years
      stackoverflow.com/questions/9429357/… this should solve your problem
  • Planky
    Planky almost 10 years
    CST is in the list TimeZone.getAvailableIDs() returns