Java 如何将UTC时间转换为设备';什么是当地时间?

Java 如何将UTC时间转换为设备';什么是当地时间?,java,android,date,Java,Android,Date,我从服务器上获取一些数据,其中一部分数据是日期。日期为UTC格式。我使用getRelativeTimeSpanString以相对时间向用户显示时间 问题 如何将UTC时间转换为用户设备上设置的本地时区 这就是我从服务器获取日期并使用relativeTimeSpanString Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH). p

我从服务器上获取一些数据,其中一部分数据是日期。日期为UTC格式。我使用
getRelativeTimeSpanString
以相对时间向用户显示时间

问题

如何将UTC时间转换为用户设备上设置的本地时区

这就是我从服务器获取日期并使用
relativeTimeSpanString

 Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH).
                                    parse("2014-05-21 12:21:41");
 Date currentDate = new Date();
 CharSequence cs =  DateUtils.getRelativeTimeSpanString(date.getTime(), currentDate.getTime(), DateUtils.SECOND_IN_MILLIS);

试试这样的。它考虑了时区和夏令时

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH);
Date date = sdf.parse("2014-05-21 12:21:41");
TimeZone tz = TimeZone.getDefault();
int currentOffsetFromUTC = tz.getRawOffset() + (tz.inDaylightTime(date) ? tz.getDSTSavings() : 0);
String result = sdf.format(date.getTime() + currentOffsetFromUTC);

你可以看看日历类什么是
格式。格式
?哦,对不起。我想你指的是
sdf.format
。那么我应该在
日期
使用
getRelativeTimeSpanString
吗?是的,我从我不久前发布的另一个答案中复制了这个答案,OP使用的是
格式
,但我使用的是
sdf
。使用上面的代码,您应该会得到一个有效的字符串,其格式应符合用户对其自身语言环境的期望。太好了。因此,我使用的是
DateUtils.getRelativeTimeSpanString(date.getTime()+currentOffsetFromUTC,currentDate.getTime(),DateUtils.SECOND(单位:毫秒))将报告其工作方式:)