package com.gh.common.util; import android.text.TextUtils; import com.gh.common.constant.Constants; import com.gh.gamecenter.BuildConfig; import com.halo.assistant.HaloApp; import java.util.regex.Pattern; import androidx.collection.ArrayMap; public class TimestampUtils { // 基准时间 private static final long BASE = 1426608000000L; private static ArrayMap intervalMap; // 间隔 private static ArrayMap cdMap; // cd public static void initMap() { initIntervalMap(); initCDMap(); } private static void initIntervalMap() { intervalMap = new ArrayMap<>(); intervalMap.put(".*index.*", 5); intervalMap.put(".*columns.*", 10); intervalMap.put(".*games.*", 15); intervalMap.put(".*articles.*", 20); intervalMap.put(".*halo_addons.*", 10); intervalMap.put(".*packages.*", 1); } private static void initCDMap() { cdMap = new ArrayMap<>(); cdMap.put(".*index.*", Constants.GAME_CD); cdMap.put(".*columns.*", Constants.GAME_CD); cdMap.put(".*games.*", Constants.GAME_CD); cdMap.put(".*articles.*", Constants.NEWS_CD); cdMap.put(".*halo_addons.*", Constants.ADDONS_CD); cdMap.put(".*packages.*", Constants.PACKAGES_CD); } /* * 为url添加timestamp */ public static String addTimestamp(String url) { if (BuildConfig.DEBUG || "GH_REFRESH".equals(HaloApp.getInstance().getChannel())) { if (TextUtils.isEmpty(url)) { return url; } if (url.contains("?")) { String u = url + "×tamp=" + System.currentTimeMillis(); return u; } else { String u = url + "?timestamp=" + System.currentTimeMillis(); return u; } } else { if (TextUtils.isEmpty(url)) { return url; } int cd = 0; for (String key : getCdMap().keySet()) { if (Pattern.matches(key, url)) { cd = getCdMap().get(key); break; } } if (cd == 0) { return url; } if (url.contains("?")) { String u = url + "×tamp=" + getTimestamp(url, cd); // Utils.log("url = " + u); return u; } else { String u = url + "?timestamp=" + getTimestamp(url, cd); // Utils.log("url = " + u); return u; } } } private static ArrayMap getCdMap() { if (cdMap == null) { cdMap = new ArrayMap<>(); } return cdMap; } /* * 根据CD获取时间戳 */ public static long getTimestamp(String url, int cd) { long base = BASE; for (String key : getIntervalMap().keySet()) { if (Pattern.matches(key, url)) { // Utils.log("url add base = " + url); base += getIntervalMap().get(key); break; } } long now = System.currentTimeMillis(); // Utils.log("url now timestamp = " + now); return (long) (Math.ceil((now - base) / cd) * cd + base); } private static ArrayMap getIntervalMap() { if (intervalMap == null) { intervalMap = new ArrayMap<>(); } return intervalMap; } /* * 去除url中的timestamp */ public static String removeTimestamp(String url) { if (!url.contains("timestamp")) return url; int index = url.lastIndexOf("timestamp"); String params = url.substring(index); //连接符 String connector = url.substring(index - 1, index); String key = url.substring(0, index - 1); index = params.indexOf("&"); if (index != -1) { key = key + connector + params.substring(index + 1); } return key; } }