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



在我的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;
    }

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

例子:

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

输出获取:05:02:30

关于日期和DateFormat有几点需要注意。Java中的日期对象总是使用UTC -它的打印方式(即使在像System.out.println()这样的东西中)取决于时区(例如,在sysout中,timeZone是系统默认的TZ)。

那么,说了这么多,让我们来看看你的问题。首先要解析一个字符串,其中包含某个时区的日期。让我们假设datestring在用户的时区-要将其转换为正确的UTC时间,您必须告诉DateFormat字符串正在解析的是哪个时区:
// Assuming you have the userTimeZone already
inputFormatter.setTimeZone(userTimeZone);

当您现在解析日期时,您将获得正确的java.util.Date对象。如果希望将其格式化为只包含小时、分钟和秒的String,则必须再次定义所需的目标TZ。假设这也是用户的TZ:

outputFormatter.setTimeZone(userTimeZone);

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

相关内容

  • 没有找到相关文章

最新更新