獲取一個時間粒度整數倍的時間點
阿新 • • 發佈:2018-11-19
package lin; import java.util.Calendar; public class ClientUtil { private static final int secondsAnHour = 3600; /** * 獲取指定時間的下一個時間粒度整數倍的時間點 * @param lTime 傳入的時間long(單位: ms) * @param gra 時間粒度int(單位:s) * @return 返回的時間 long */ public static long getNextGranularityTime(long lTime, int gra) { long retLong = 0; Calendar cal = Calendar.getInstance(); if (lTime <= 0 || gra <= 0) { return cal.getTimeInMillis(); } if (gra >= secondsAnHour) { long remainder = lTime % (secondsAnHour * 1000); if (remainder == 0) { return lTime+secondsAnHour * 1000; } else { return lTime - remainder + secondsAnHour * 1000; } } else { int rawOffset = cal.getTimeZone().getRawOffset(); retLong = ((lTime + rawOffset) / (gra * 1000) + 1) * gra * 1000; return retLong - rawOffset; } } /** * 獲取指定時間的上一個時間粒度整數倍的時間點 * @param lTime 傳入的時間(單位: ms) * @param gra 時間粒度(單位:s) * @return long 返回的時間 */ public static long getPreGranularityTime(long lTime, int gra) { long retLong = 0; Calendar cal = Calendar.getInstance(); if (lTime <= 0 || gra <= 0) { return cal.getTimeInMillis(); } if (gra >= secondsAnHour) { return lTime - lTime % (secondsAnHour * 1000); } else { int rawOffset = cal.getTimeZone().getRawOffset(); retLong = ((lTime + rawOffset) / (gra * 1000) + 1) * gra * 1000 - gra * 1000; return retLong - rawOffset; } } }