java 時間的相關轉換操作
阿新 • • 發佈:2018-12-14
關於時間的操作,寫了個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;
}
}