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...
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?
您可以使用“CST6CDT”时区,当中央夏令时(CDT)切换回CST时,它将自动为您提供正确的时间,反之亦然。
The following code helped me.
TimeZone tzone = TimeZone.getTimeZone("Singapore");
// set time zone to default
tzone.setDefault(tzone);
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.
在遇到类似问题时,以下似乎对我有用:
Calendar c = Calendar.getInstance(TimeZone.getTimeZone("America/Chicago"));
我发现的一件事是Java的TimeZone不识别“+09:00”,但它确实识别出“GMT + 09:00”和“GMT + 0900”。
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.