Android 项目 工作平台 需要显示细化的时间,但硬件PAD时间不同,做了同步服务器时间
timStamp,timeZone -- 登陆获取服务器获取时间戳 和 时区
public static long timeDifference;//与服务器时间的差异
public static void gettimeDifference(long org_server_tm, String server_timezone) {
Date w_ret = Utility.DateTimeConvertToServer(new Date(), server_timezone);
timeDifference = org_server_tm - w_ret.getTime();
}
/***
* 把当地的时间转为服务器当时的时间,一般递交数据前先把Date一类数据转换
*
* @param tm
* @return
*/
public static Date DateTimeConvertToServer(Date tm, String server_timezone) {
if (tm == null)
return null;
String timezone = TimeZone.getDefault().getID();
if ("GMT".equals(timezone)) {
timezone = timezone + "+0";
}
tm = new Date(tm.getTime() - getDiffTimeZoneRawOffsetStd(timezone)); // 转成格林威治时间
Date d = new Date(tm.getTime() + getDiffTimeZoneRawOffsetStd(server_timezone));
return d;
}
/***
* 计算出指定时区跟格林威治时间差
*
* @param timeZoneId
* @return
*/
public static int getDiffTimeZoneRawOffsetStd(String timeZoneId) {
// return TimeZone.getTimeZone(timeZoneId).getRawOffset();
TimeZone tz = TimeZone.getTimeZone(timeZoneId);
return tz.getOffset(GregorianCalendar.getInstance(tz).getTimeInMillis());
}
此 timeDifference 为与服务器时间的差异
/**
* 永远以server为准
*
* @return
*/
public static long getnowTime() {
if (MyApplication.timeDifference != 0) {
if (TeacherBean.getInstance().timeZone.isEmpty()) {
TeacherBean.getInstance().timeZone = "Asia/Shanghai";
}
Date w_ret = DateTimeConvertToServer(new Date(), TeacherBean.getInstance().timeZone);
w_ret.setTime(w_ret.getTime() + MyApplication.timeDifference);
return w_ret.getTime();
} else {
return System.currentTimeMillis();
}
}