将 GMT 时区转换为用户特定时区
Convert GMT timezone to user specifc 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;
}
更新
我尝试将时区设置为 outputFormatter 而不是 inputFormatter,但它仍然相同,输出没有变化。
示例:
输入:Tue, 21 Jul 2015 09:02:30 GMT
输出得到:05:02:30
关于日期和日期格式的一些注意事项。 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 中获得时间字符串。
在我的 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
关于日期和日期格式的一些注意事项。 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 中获得时间字符串。