Java 将UTC时间转换为电话本地时间

Java 将UTC时间转换为电话本地时间,java,android,datetime,rest,Java,Android,Datetime,Rest,我正在尝试从服务器UTC时间获取本地时间。我从服务器上获取UTC时间——我想让每一部Android手机,无论是在加利福尼亚还是在中国,都能正确使用UTC时间 这就是我现在正在使用的代码——但是它不起作用 我从服务器得到的时间是 "2010-08-17 19:41:13.0" 我用来获取差异(以秒为单位)的代码如下: public static long getSecondsDifference(Timestamp timeStamp) { final Calendar calendar

我正在尝试从服务器UTC时间获取本地时间。我从服务器上获取UTC时间——我想让每一部Android手机,无论是在加利福尼亚还是在中国,都能正确使用UTC时间

这就是我现在正在使用的代码——但是它不起作用

我从服务器得到的时间是

"2010-08-17 19:41:13.0"
我用来获取差异(以秒为单位)的代码如下:

public static long getSecondsDifference(Timestamp timeStamp) {
    final Calendar calendar = Calendar.getInstance(Locale.getDefault());

    int refrenceOffset = TimeZone.getDefault().getOffset(timeStamp.getTime());

    final long referenceSeconds = (timeStamp.getTime() + refrenceOffset) / 1000;
    final long currentTimeSeconds = (calendar.getTimeInMillis()) / 1000;

    final long differenceMinutes = (currentTimeSeconds - referenceSeconds) / 60;

    return differenceMinutes;
}
时间戳来自java.sql.timestamp包


现在我所在的时间是11:50AM——该方法返回给定的服务器时间是-53分钟前(显然是做错了:)

这与夏令时有关。因为我住的是太平洋夏令时(PDT),所以我必须补偿

public static long getSecondsDifference(Timestamp timeStamp) {
    final Calendar calendar = Calendar.getInstance(Locale.getDefault());

    int offset = TimeZone.getDefault().getOffset(timeStamp.getTime());

    if (TimeZone.getDefault().inDaylightTime(Calendar.getInstance().getTime())) {
        offset = offset - TimeZone.getDefault().getDSTSavings();
    }
    final long referenceSeconds = (timeStamp.getTime() + offset) / 1000;

    final long currentTimeSeconds = (calendar.getTimeInMillis()) / 1000;

    final long differenceSeconds = (currentTimeSeconds - referenceSeconds);

    return differenceSeconds;
}

我会在每一步检查每个值。有些东西不是你想象的那样。