Android:更改日期字符串的时区



我已经尝试了大约一个小时,但它似乎无法正常工作。

我基本上是从数据库中读取日期字符串,其格式为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"));

相关内容

  • 没有找到相关文章

最新更新