1. 程式人生 > >java 時間的相關轉換操作

java 時間的相關轉換操作

關於時間的操作,寫了個util 主要用於預測的時候,時間段的確定 預測的時間段,需要明確的規定範圍,由於業務的促銷都是整點開始,所以我們的預測時間段,也是從整點開始 所以就要將時間分為多個整段,比如一分鐘一段,那麼就是2018-06-18 00:00:00 到2018-06-18 00:01:00 就是一段 那麼在確定一分鐘為一段的前提下,我們就要將這一分鐘內所有資料都歸到這一分鐘內 下面的util就有根據隨機時間,確定這個時間是哪個段的 比如: 當前時間是2018-06-18 00:00:30 ,時間段為一分鐘 根據下面的的方法,就可以得到2018-06-18 00:00:00和2018-06-18 00:01:00,也就是這個時間所在的時間區域

import java.
text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * 時間片分割工具類 **/ public class TimeUtil { /** * 將一天的時間分割成等分的若干段,獲得總段數 * * @param second 每個時間段的長度,單位秒 * @return 返回一天的段數, 結果取加一法的結果 */ public static int getAllSplitNums(
int second) { return (24 * 60 * 60 - 1) / second + 1; } /** * 根據每段的時間和當前時間,算出當前時間在第幾段 * 時間段區間預設左閉右開 * eg:如果5分鐘為一個時間段的話,那麼[00:00:00,00:05:00)就在第一段,返回1;[00:05:00,00:10:00)就在第二段,返回2 * * @param time * @param second * @return */ public static int getOneNum(long time, int
second) { int secondNum = getSecondNum(time); return (secondNum - 1) / (second * 1000) + 1; } /** * 根據long型別的時間,獲取時分秒的秒數 * * @param time long型別的時間 * @return 時分秒的秒數 */ public static int getSecondNum(long time) { Date date = new Date(time); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss:SSS"); String format = simpleDateFormat.format(date); String[] split = format.split(":"); int secondNum = 0; secondNum += Integer.valueOf(split[0]) * 60 * 60 * 1000; secondNum += Integer.valueOf(split[1]) * 60 * 1000; secondNum += Integer.valueOf(split[2]) * 1000; secondNum += Integer.valueOf(split[3]); return secondNum; } /** * 根據但當前時間和時間段長度,獲得當前時間所在的時間段 * * @param reqTime 入參時間,eg:1535551963527,毫秒級 * @param second 間隔時間 * @return 返回入參時間所在的時間段,左開右閉 */ public static String getSameTime(String reqTime, int second) { String s = null; try { Long reqTimeLong = Long.valueOf(reqTime); //獲得這個時間在當天的第幾段 int secondNum = getSecondNum(reqTimeLong); long dayTime = reqTimeLong - secondNum; int oneNum = getOneNum(reqTimeLong, second); long end = dayTime + oneNum * second * 1000; long start = dayTime + (oneNum - 1) * second * 1000; SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMddHHmmss"); s = sdf2.format(start) + ":" + sdf2.format(end); } catch (Exception e) { e.printStackTrace(); } return s; } /** * 是不是整時段,比如時間段是30,那麼只有秒數是00或者30的才會返回true,其他情況返回false * * @param timeInterval 時間段,單位秒 * @return 布林值 */ public static Boolean isClock(Integer timeInterval) { if(timeInterval == null || timeInterval.equals(0)){ return null; } long now = System.currentTimeMillis(); SimpleDateFormat sdf2 = new SimpleDateFormat("yyyyMMddHH-mm-ss"); String nowStr = sdf2.format(now); String[] split = nowStr.split("-"); //只取分秒 int res = Integer.valueOf(split[1]) * 60 + Integer.valueOf(split[2]); return res % timeInterval == 0; } /** * 根據本端時間獲取下段時間 * @param time 本段時間,格式必須是yyyyMMddHHmmss_yyyyMMddHHmmss的 * @return 返回下段時間,格式也是yyyyMMddHHmmss_yyyyMMddHHmmss */ public static String getNextTime(String time){ String nextTime = null; try { String[] split = time.split(":"); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); Date startDate = sdf.parse(split[0]); System.out.println("startDate:"+startDate); Date endDate = sdf.parse(split[1]); System.out.println("endDate:"+endDate); int timeInterval = (int) (endDate.getTime() - startDate.getTime()) / 1000; System.out.println("timeInterval:"+timeInterval); long nextTimeLong = endDate.getTime() + 1; nextTime = getSameTime(nextTimeLong + "", timeInterval); } catch (Exception e) { e.printStackTrace(); } return nextTime; } }