将UTC时间转换为手机当地时间

时间:2010-08-17 18:53:02

标签: java android datetime rest

我正在尝试从服务器UTC时间获取本地时间。我从服务器获得了UTC时间 - 我想让它适合每个Android手机,无论是在加利福尼亚还是中国。

这是我现在使用的代码 - 不过它吸收了工作。

我从服务器获得的时间是

"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:50 - 并且该方法返回给定的服务器时间是-53分钟前(显然做错了:))

1 个答案:

答案 0 :(得分:1)

这与夏令时有关。自从我住的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;
}