2010-08-17 186 views
0

我想从服务器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:50 AM - 并且该方法返回给定服务器时间-53分钟前(如此明显做错事:))

+0

我会检查每一步的每个值。有些东西不是你认为的。 – John 2010-08-17 19:39:18

回答

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; 
}