我已经尝试了大约一个小时,但它似乎无法正常工作。
我基本上是从数据库中读取日期字符串,其格式为yyyy-MM-dd HH:MM:ss(2012-03-01 14:32:00)。
在这一点上,我所拥有的只是字符串,没有时区信息。这个时间是在我们的服务器上创建的,并最终进入设备数据库,我知道这是东部标准时间。
所以我基本上尝试了以下代码:
SimpleDateFormat sourceFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sourceFormat.setTimeZone(TimeZone.getTimeZone("EST"));
Date parsed = sourceFormat.parse("2012-03-01 10:18:14");
TimeZone tz = TimeZone.getDefault();
SimpleDateFormat destFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
destFormat.setTimeZone(tz);
String result = destFormat.format(parsed);
Log.v("TZ", result);
我的模拟器是EST,所以当我记录时间时,它显示2012-03-01 10:18:14,这是正确的。
但如果我把sourceFormat的时区改为美国/洛杉矶,我会得到2012-03-01 05:18:14的输出。
现在我不是专家,但我敢肯定洛杉矶比蒙特利尔晚3个小时(我们办公室所在的美国东部时间)。因此,如果我取2012-03-01 10:18:14的时间,称之为美国/洛杉矶时间,然后将其转换为EST,我预计会看到2012-03-01 13:18:14。
发生了什么事?
如有任何帮助,我们将不胜感激。
非常感谢。
如果您还没有解决这个问题,JDK 1.2已经不赞成使用三个字母的时区ID(例如,"EST"),因为同一缩写经常用于多个时区(例如,"CST"可能是美国的"中央标准时间"one_answers"中国标准时间"),而Java平台只能识别其中一个时区。因此,即使您提供sourceFormat.setTimeZone(TimeZone.getTimeZone("EST"));
,代码也会将您的时区默认为GMT。
为了避免这种情况,您可以尝试将3个字母的区域ID替换为-
通用时区格式:sourceFormat.setTimeZone(TimeZone.getTimeZone("GMT-05:00"));
,
或RFC 822时区格式:sourceFormat.setTimeZone(TimeZone.getTimeZone("-05"));
。