生活随笔
收集整理的這篇文章主要介紹了
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
;}
}
總結
以上是生活随笔為你收集整理的java 时间的相关转换操作的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。