在我当地的时区打印UTC时间

时间:2014-09-22 16:39:06

标签: java android

我有一个以这种格式来自API的时间戳:

yyyy-MM-dd'T'HH:mm:ss.SSSSSS

我想在他们自己的时区(在Android上)为用户格式化它。这就是我正在做的事情:

String timestampFromApi = "...";

DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.ENGLISH);
Date date = df1.parse(timestampFromApi);

DateFormat df2 = new SimpleDateFormat();

Log.v(TAG, "In your timezone: " + df2.format(date));

但是这会以UTC格式打印时间。例如,如果时间戳发生在UTC时间下午4点,并且我在PDT中,结果是它仍然打印“下午4点”。

我检查了使用的时区:

df2.getTimeZone()

它会为我的设备打印出PDT。我在这做错了什么?

由于

1 个答案:

答案 0 :(得分:0)

你走在正确的轨道上。您从服务器获得了UTC时间,但现在您只需要在格式化时计算本地偏移量。尝试这样的事情:

private String formatTime(String timestampFromApi){
    SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.ENGLISH);
    df1.setTimeZone(TimeZone.getTimeZone("UTC"));
    Date date = df1.parse(timestampFromApi);

    Log.v(TAG, "In your timezone: " + df1.format(getAdjustedTime(date.getTime())));
}

private Date getAdjustedTime(long utcDate){
    return new Date(utcDate + TimeZone.getDefault().getOffset(new Date().getTime()));
}

getAdjustedTime()方法将根据本地Date的UTC偏移量创建新的TimeZone对象。