我有一个来自API的时间戳,格式如下:
yyyy-MM-dd'T'HH:mm:ss.SSSSSS
我想为用户在自己的时区(在安卓系统上)格式化它。这就是我正在做的:
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。我做错了什么?
感谢
你走在了正确的轨道上。你从服务器上得到了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()
方法将基于与本地TimeZone
的UTC偏移量创建新的Date
对象。