将GMT时区转换为用户指定的时区

时间:2015-07-21 05:26:21

标签: java android date datetime timezone

在我的Android应用程序中,我必须解析格式为EEE, dd MMM yyyy HH:mm:ss zzz的日期。我正在使用以下方法从中提取时间。这很完美。但是时间总是以GMT格式显示,所以我必须将其转换为用户时区,因为我在解析之前在代码中添加了一行,代码为inputFormatter.setTimeZone(TimeZone.getDefault()); 由于这不起作用,我已将参数更改为TimeZone.getTimeZone("UTC")TimeZone.getTimeZone("Asia/Kolkata")等等,但没有任何作用,时间仍以GMT格式显示。

实际上这有什么问题?我该如何解决这个问题,感谢任何帮助

public static String extractTime(String dateInput) {
        Date date = null;
        String time;

        try {
            DateFormat inputFormatter = new SimpleDateFormat(mFormat, Locale.getDefault());
            date = inputFormatter.parse(dateInput);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        SimpleDateFormat outputFormatter = new SimpleDateFormat("HH:mm:ss");
        time = outputFormatter.format(date);
        return time;
    }

更新

我尝试将timezone设置为outputFormatter而不是inputFormatter,但它仍然相同,输出没有变化。

示例:

输入:Tue, 21 Jul 2015 09:02:30 GMT

输出获取:05:02:30

1 个答案:

答案 0 :(得分:1)

有关日期和DateFormat的一些注意事项。 Java中的日期对象始终是UTC - 它的打印方式(即使像System.out.println()这样的东西)取决于timeZone(例如在sysout中timeZone是系统的默认TZ)。

所以,说过,让我们来解决你的问题。您首先要解析包含特定时区中的日期的字符串。让我们假设日期字符串在用户的TZ中 - 要将它转换为正确的UTC时间,您必须告诉DateFormat它正在解析字符串所在的TZ:

// Assuming you have the userTimeZone already
inputFormatter.setTimeZone(userTimeZone);

当您现在解析日期时,您将获得正确的java.util.Date对象。如果要格式化此项以获取仅包含小时,分钟和秒的字符串,则必须再次定义所需的目标TZ。假设这也是用户的TZ:

outputFormatter.setTimeZone(userTimeZone);

现在使用此格式化程序格式化日期时,您将在用户的TZ中获得时间字符串。