Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TimeZone.getTimeZone("CST") returns GMT

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...

like image 615
Arch1tect Avatar asked Jun 21 '13 19:06

Arch1tect


1 Answers

The following seems to have worked for me as was facing similar issues:

Calendar c = Calendar.getInstance(TimeZone.getTimeZone("America/Chicago"));
like image 161
j2emanue Avatar answered Sep 25 '22 15:09

j2emanue