在工作的业务中,碰到过,根据时间区间比如说2小时,12小时,24小时,返回不同的开始时间和结束时间,具体来说,就是,当筛选两小时的时候,返回一天的00:00:00—>13:59:59 ,14:00:00–>15:59:59,….22:00:00–>23:59:59 ;当筛选12小时,返回一天的08:00:00–>20:00:00,20:00:00–>08:00:00 ,当筛选24小时的时候,返回一天的00:00:00–>23:59:59
现在就写一个公共类来解决这个问题。
public class BatteryUtil {
public static void main(String[] args) {
int stepNumber = 0;
int colSize = 1 ;//12 2 1 1
int interval = 7;//2 12 24 7 30
for (int i = 0; i <= 6; i++) {
String testTime = "2017-08-1"+i;
for (int col = 1; col <= colSize; col++) {
stepNumber = stepNumber + interval;
String [] times = getOriginalInterval(testTime,stepNumber,interval);
System.out.println("startDate: "+times[0]+" , endDate: "+times[1]);
}
}
}
public static String[] getOriginalInterval(String testTime, int number, int interval) {
String[] resultTime = new String[2];
double multiple = number / 24;
if (number % 24 != 0) {
multiple = multiple + 1;
}
// number > 24
if (multiple > 1) {
//**-------------开始时间-------------**//
double dVal = number - 24 * (multiple - 1);// {"2小时":[2,4,6,8,10,..],"12小时":[]}
int iVal = (int) dVal;
String startTime = "";
if(interval==12){
int before = (number / 12) % 2;
StringBuilder tempStr = new StringBuilder();
if(before == 1){
startTime =tempStr.append(testTime).append(" ").append("08:00:00").toString();
}else{
startTime = tempStr.append(testTime).append(" ").append("20:00:00").toString();
}
}else{
int before = iVal - interval; //"2小时":[0,2,4,6,8,10,12...],"12小时":[0,12]
StringBuilder tempStr = new StringBuilder();
if(before <10){
startTime = tempStr.append(testTime).append(" ").append("0").append(before).append(":00:00").toString();
}else{
startTime = tempStr.append(testTime).append(" ").append(before).append(":00:00").toString();
}
}
//**--------------结束时间------------------**//
String endTime = "";
if(interval == 12){
int newNumber = (number / 12) % 2;
StringBuilder tempEle = new StringBuilder();
if(newNumber == 1){
endTime = tempEle.append(testTime).append(" ").append("20:00:00").toString();
}else{
testTime = nextDay(testTime);//往后推一天
endTime = tempEle.append(testTime).append(" ").append("08:00:00").toString();
}
}else{
int newIval = iVal - 1;// "2小时":[1,3,5,7,..],"12小时":[11,23]
StringBuilder tempEle = new StringBuilder();
if(newIval <10){
endTime = tempEle.append(testTime).append(" ").append("0").append(newIval)
.append(":00:00").toString();
}else{
if(interval == 24){ //固定
endTime = tempEle.append(testTime).append(" ").append("23:59:59").toString();
}else{
endTime = tempEle.append(testTime).append(" ").append(newIval)
.append(":59:59").toString();
}
}
}
resultTime[0] = startTime;
resultTime[1] = endTime;
// number <= 24
}else{
//**--------------开始时间----------------------**//
String startTime = "";
if(interval == 12){
int before = (number / 12) % 2;
StringBuilder tempStr = new StringBuilder();
if(before == 1){
startTime =tempStr.append(testTime).append(" ").append("08:00:00").toString();
}else{
startTime = tempStr.append(testTime).append(" ").append("20:00:00").toString();
}
}else{
int before = number - interval;//"2小时":[0,2,4,6,8,10..],"12小时":[]
StringBuilder tempStr = new StringBuilder();
if(before <10){
startTime = tempStr.append(testTime).append(" ").append("0").append(before)
.append(":00:00").toString();
}else{
startTime = tempStr.append(testTime).append(" ").append(before).append(":00:00").toString();
}
}
//**------------------结束时间---------------------------**//
String endTime = "";
if(interval == 12){
int newNumber = (number / 12) % 2;
StringBuilder tempEle = new StringBuilder();
if(newNumber == 1){
endTime = tempEle.append(testTime).append(" ").append("20:00:00").toString();
}else{
testTime = nextDay(testTime);//往后推一天
endTime = tempEle.append(testTime).append(" ").append("08:00:00").toString();
}
}else{
//间隔向前-1
int newNumber = number -1;//{"2小时":[1,3,5,7,9,11,..],"12小时":[]}
StringBuilder tempEle = new StringBuilder();
if(newNumber <10 ){
endTime = tempEle.append(testTime).append(" ").append("0").append(newNumber)
.append(":59:59").toString();
}else{
endTime = tempEle.append(testTime).append(" ").append(newNumber).append(":59:59").toString();
}
}
resultTime[0] = startTime;
resultTime[1] = endTime;
}
return resultTime;
}
/**
* 将当前的日期往后推一天
* @param testTime
* @return
* @throws ParseException
*/
private static String nextDay(String testTime) {
try {
Date date = new SimpleDateFormat("yyyy-MM-dd").parse(testTime);
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, 1);
date = cal.getTime();
testTime = new SimpleDateFormat("yyyy-MM-dd").format(date);
return testTime;
} catch (ParseException e) {
e.printStackTrace();
throw new RuntimeException("格式化日期出错",e);
}
}
}