如何将UTC时间转换为其他时区(“CST”,“IST”)

5

我的安卓应用程序会从服务器返回一些UTC日期,格式为(yyyy-MM-dd HH:mm:ss) 24小时制,我需要将这些时间转换为用户所在的时区,例如CSTIST

我尝试了以下代码,但我不确定它是否正确,请帮助我以正确的方式进行时区转换。

我获取UTC日期作为json字符串,并将其转换为用户的时区格式,并在Android端显示

private static Date utcDate;
private static DateFormat expireFormat = new SimpleDateFormat(
        "yyyy-MM-dd HH:mm:ss");

        try {
            expireFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
            utcDate = expireFormat.parse("2014-04-01 10:32:00");
            System.out.println(TimeZone.getDefault().getID());
            expireFormat.setTimeZone(TimeZone.getTimeZone(TimeZone.getDefault().getID()));
            System.out.println(expireFormat.format(utcDate));
        } catch (ParseException e) {
            e.printStackTrace();
        }

    output of the code:
    Asia/Calcutta
    2014-04-01 16:02:00

TimeZone.getDefault().getOffset(now.getTime()),其中now是用户当前时间的long型变量,应该返回设备相对于GMT的时区偏移量。 - mraviator
1个回答

4

如果你真的想得到一个重新格式化的字符串,总体方法是可以的。

但是还有一些问题:

  1. SimpleDateFormat 不是线程安全的类。在服务器中将其设置为静态字段是个问题!

  2. 与 #1 同样的问题,使用静态字段来保存中间的 Date 对象。

  3. "CST" 是指中国标准时间吗?美国或澳大利亚的中央标准时间?古巴标准时间?三字母时区缩写通常不太好。尽可能使用 Olson 名称或别名。

  4. 这是服务器端还是 Android 端?如果是服务器端,你可能会从新的 Java 8 API 中受益,用于处理日期和时间。


请检查我的更新代码。我使用时区获取方法而不是给定的“CST”,并且转换将在Android端完成。 - M.A.Murali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接