【问题标题】:Convert GMT timezone to user specifc timezone [duplicate]将 GMT 时区转换为用户特定的时区 [重复]
【发布时间】:2015-07-21 05:26:21
【问题描述】:

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

【问题讨论】:

  • 你应该将时区设置为outputFormatter而不是inputFormatter
  • @Codebender 没有变化,它是一样的
  • 你能输入一个输入和它的预期输出,以及你实际得到的输出吗?
  • @Codebender 请检查问题我已添加当前输入和输出
  • 请同时输入您的预期输出。和时区。我尝试将时区设置为 outputformatter,并且根据设置的时区接收到正确的时间。

标签: java android date datetime timezone


【解决方案1】:

关于日期和 DateFormat 的一些注意事项。 Java 中的日期对象始终采用 UTC - 它的打印方式(即使在类似 System.out.println() 的情况下)取决于时区(例如,在 sysout 中,时区是系统的默认 TZ)。

所以,话虽如此,让我们来解决您的问题。您首先要解析包含特定时区日期的字符串。假设 datestring 在用户的 TZ 中 - 要将其转换为正确的 UTC 时间,您必须告诉 DateFormat 字符串在哪个 TZ 中进行解析:

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

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

outputFormatter.setTimeZone(userTimeZone);

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

【讨论】:

    猜你喜欢
    • 2021-12-12
    • 1970-01-01
    • 2019-12-18
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 2018-06-14
    相关资源
    最近更新 更多