我有一个以这种格式来自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。我在这做错了什么?
由于
答案 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
对象。