Android 同步服务器时区

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

    }



你可能感兴趣的:(android,timezone,同步服务器时间)