UDT时间格式转换为时间戳
问题描述
和客户对接服务器请求,网络请求中要求传入当前时间戳。
服务器请求间隔取间隔1天1次。
当测试时发现第一次可以正常获取,想测试第二次的值,手动改了设备时间到2天后,发现请求异常。
问题分析
网络请求中要求传入时间戳,如果修改设备时间,传入的时间戳和服务器的时间不匹配,服务器会认为非法请求,返回404.
result: {"timestamp":"2023-03-10T09:12:23.034+00:00","status":404,"error":"Not Found","path":"/ads"}
获取服务器时间
以上log中发现,服务器404的时候会带timestamp参数。
如果后续的请求传入timestamp中的时间,就不会因为设备时间导致后续请求异常。
方案
首次获取服务器异常时,解析timestamp参数。
但是时间格式很诡异,单T的UTC时间格式,需要转化为long类型的时间戳。
private final String YMDHMS_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";@SuppressLint("SimpleDateFormat")public long utc2Local(String utcTime) {try {if (TextUtils.isEmpty(utcTime)) {return -1;}SimpleDateFormat utcFormater = new SimpleDateFormat(YMDHMS_FORMAT);utcFormater.setTimeZone(TimeZone.getTimeZone("UTC"));Date gpsUTCDate = null;try {gpsUTCDate = utcFormater.parse(utcTime);} catch (ParseException e) {e.printStackTrace();return -1;}return gpsUTCDate.getTime();} catch (Exception e) {e.printStackTrace();return -1;}}
使用的地方,解析服务器时间,如果解析异常,使用当前设备时间
long serviceTimeMillis = utc2Local(time);
long currentTimeMillis = System. currentTimeMillis();
if (serviceTimeMillis == -1){serviceTimeMillis = currentTimeMillis;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
