【问题标题】:Android: Change timezone of date stringAndroid:更改日期字符串的时区
【发布时间】:2012-03-20 08:10:04
【问题描述】:

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

我基本上是从数据库中读取日期字符串,格式为 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 的时区更改为 America/Los Angeles,我会得到 2012-03-01 05:18:14 的输出。

现在我不是专家,但我很确定洛杉矶比蒙特利尔晚 3 小时(我们办公室所在的东部标准时间)。因此,如果我将时间 2012-03-01 10:18:14 称为美国/洛杉矶时间,然后将其转换为 EST,我希望看到 2012-03-01 13:18:14。

发生了什么事?

任何帮助将不胜感激。

非常感谢。

【问题讨论】:

  • 你能在真机上测试吗?有时模拟器注定要失败。
  • 是的,我可以在设备上进行测试,我明天一进去就试试。我知道模拟器并不总是表现得像真实的东西,但它确实显示了当前时间,就像它在我的桌面上一样。

标签: android timezone


【解决方案1】:

如果您尚未解决此问题,则 JDK 1.2 已不推荐使用三个字母的时区 ID(例如,在您的情况下为“EST”),因为相同的缩写通常用于多个时区(例如,“CST”可以是美国“Central Standard Time”和“China Standard Time”),Java 平台只能识别其中之一。因此,即使您提供 sourceFormat.setTimeZone(TimeZone.getTimeZone("EST"));,代码也会将您的时区默认为 GMT。

为避免这种情况,您可以尝试将 3 个字母的区域 ID 替换为 -
一般时区格式:sourceFormat.setTimeZone(TimeZone.getTimeZone("GMT-05:00"));,

或 RFC 822 时区 格式:sourceFormat.setTimeZone(TimeZone.getTimeZone("-05"));。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    相关资源
    最近更新 更多