TimeZone.getTimeZone(“CST”) returns GMT

匿名 (未验证) 提交于 2019-12-03 02:03:01

问题:

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:

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

回答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?



回答2:

The following code helped me.

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


回答3:

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.



回答4:

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. 


回答5:

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

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


回答6:

One thing I found is that Java's TimeZone doesn't recognize "+09:00", but it does recognize "GMT+09:00" and "GMT+0900".



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!