Java getTimeZone(“CST”)返回GMT

Java getTimeZone(“CST”)返回GMT,java,android,timezone,Java,Android,Timezone,我正在将时间从CST转换为本地时间,但getTimeZone似乎无法正常工作 String cstTime = "2013-06-21 14:00:00"; SimpleDateFormat simpleDateFormat = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); simpleDateFormat.setTimeZone(TimeZone.getTimeZone("CST"));

我正在将时间从CST转换为本地时间,但
getTimeZone
似乎无法正常工作

    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" 
它似乎使用GMT而不是CST,下面是我调试时得到的结果:

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]
它使用GMT吗?为什么? 提前谢谢

编辑:

最后通过使用

simpleDateFormat.setTimeZone(TimeZone.getTimeZone( "GMT-5")); //GMT-5 is for CDT, I found my server is actually using CDT not CST

仍然不知道为什么使用字符串“CST”无法工作…

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

尝试使用getAvailableIDs?

对于任何日期-时间转换,我建议使用JODA date-time,它可以帮助我解决一系列日期-时间问题

您可以使用时区初始化日期,并可以很容易地在它们之间进行转换

DateTimeZone zone = DateTimeZone.forID("Europe/London");


在我面临类似问题时,以下内容似乎对我起到了作用:

Calendar c = Calendar.getInstance(TimeZone.getTimeZone("America/Chicago"));

下面的代码帮助了我

TimeZone tzone = TimeZone.getTimeZone("Singapore");
// set time zone to default
tzone.setDefault(tzone);

您可以使用“CST6CDT”时区当中央夏令时(CDT)切换回CST时,它会自动为您提供正确的时间,反之亦然。

我发现Java的时区不识别“+09:00”,但它识别“GMT+09:00”和“GMT+0900”.

时区不要使用短名称,请始终使用长名称。东部标准时间可以是东部标准时间,也可以是其他时区。可以help@Nambari尝试过“中央标准时间”仍获得GMT…要获得EST,通常我们使用美国/纽约,查看时区数据库中是否有类似的内容。美国中央标准时间通常应指定为
美国/芝加哥
。不要通过
GMT-5
,否则从CST转换到CDT时将无法获得正确的调整。CST位于列表
时区中。getAvailableIDs()
返回
Calendar c = Calendar.getInstance(TimeZone.getTimeZone("America/Chicago"));
TimeZone tzone = TimeZone.getTimeZone("Singapore");
// set time zone to default
tzone.setDefault(tzone);