我正在尝试从服务器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分钟前(显然做错了:))
答案 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;
}