日期字符串拆分算法

来源:互联网 发布:复杂网络的研究方向 编辑:程序博客网 时间:2024/06/03 06:01
package com.paic.lbdp.intf.base.util;


import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import com.paic.lbdp.intf.base.dto.ZebTimeRangeOption;
/**
 * 获取时间段的工具类
 * @author EX-ZHOUWENPING001
 *
 */
public class SetTimeRangeOptionUtil {
public  Logger logger = Logger.getLogger(SetTimeRangeOptionUtil.class);
 //获取endTime一个小时之前的时间,作为上限时间
public String getUpperTime(String endTime){
Date  date = new Date();
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
date = sdf.parse(endTime);
} catch (ParseException e) {
logger.error("调用getUpperTime方法错误!"+e);
}
       Calendar cal = Calendar.getInstance();
       cal.setTime(date);                 //date 换成已经已知的Date对象
       cal.add(Calendar.HOUR_OF_DAY, -1); // before 1 hour
       SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
       return format.format(cal.getTime());
}

//当天有跨天时调用,获取第一天的所有小时
public   List<String> getFirstHourRangeOneDay(String lowerTime){
Date  date=new Date();
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
date = sdf.parse(lowerTime);
} catch (ParseException e) {
logger.error("调用getFirstHourRangeOneDay方法错误!"+e);
}
Calendar c = Calendar.getInstance();//可以对每个时间域单独修改
   c.setTime(date);                    //date 换成已经已知的Date对象
   List<String> hours = new ArrayList<String>();
int hour = c.get(Calendar.HOUR_OF_DAY); 
for (int i=23 ; i>=hour; i--){
hours.add("cnt"+String.format("%02d", i));
}
      return hours;
}


//当天有跨天时调用,获取最后天的所有小时
public   List<String> getLastHourRangeOneDay(String upperTime){
Date  date=new Date();
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
date = sdf.parse(upperTime);
} catch (ParseException e) {
logger.error("调用getLastHourRangeOneDay方法错误!"+e);
}
Calendar c = Calendar.getInstance();//可以对每个时间域单独修改
   c.setTime(date);//date 换成已经已知的Date对象
   List<String> hours = new ArrayList<String>();
int hour = c.get(Calendar.HOUR_OF_DAY); 
for (int i=0 ; i<=hour; i++){
hours.add("cnt"+String.format("%02d", i));
}
      return hours;
}

//当没有跨天时调用,当天所有小时
public   List<String> getHourRangeOneDay(String lowerTime,String upperTime){
Date  dateLower=new Date();
Date  dateUpper=new Date();
   List<String> hours =new ArrayList<String>();
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
dateLower = sdf.parse(lowerTime);
dateUpper = sdf.parse(upperTime);
} catch (ParseException e) {
logger.error("调用etHourRangeOneDay方法错误!"+e);
}
Calendar c = Calendar.getInstance();//可以对每个时间域单独修改
   c.setTime(dateLower);//date 换成已经已知的Date对象
int hourLower = c.get(Calendar.HOUR_OF_DAY); 
   c.setTime(dateUpper);//date 换成已经已知的Date对象
int hourUpper = c.get(Calendar.HOUR_OF_DAY);
for (int i=hourLower ; i<=hourUpper; i++){
hours.add("cnt"+String.format("%02d", i));
}
      return hours;
}

//获取当前时间一个小时之前的时间
public  String getOneHoursAgo(String endTime){
Date date =new Date();
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
date = sdf.parse(endTime);
} catch (ParseException e) {
logger.error("调用getOneHoursAgo方法错误!"+e);
}
       Calendar cal = Calendar.getInstance();
       cal.setTime(date);//date 换成已经已知的Date对象
       cal.add(Calendar.HOUR_OF_DAY, -1);// before 1 hour
       SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
       return format.format(cal.getTime());
}

//获取当前时间的前一天
public  String getSpecifiedDayBefore(String specifiedDay){ 
Calendar c = Calendar.getInstance(); 
Date date = null; 
try { 
date = new SimpleDateFormat("yy-MM-dd").parse(specifiedDay); 
} catch (ParseException e) { 
logger.error("调用getSpecifiedDayBefore方法错误!"+e); 

c.setTime(date); 
int day = c.get(Calendar.DATE); 
c.set(Calendar.DATE,day-1); 
String dayBefore = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); 
return dayBefore; 


//获取SQL中的条件
public  ZebTimeRangeOption setTimeRangeOption(String startTime, String endTime){
String lowerTime = startTime;
String upperTime = getOneHoursAgo(endTime);
ZebTimeRangeOption zebOption = new ZebTimeRangeOption();
String firstSumOption = null;
String firstWhereOption = null;
String middleSumOption = null;
 
//statis_date>'' and statis_date<''
String middleWhereOption = null;
 
//sum(cnt10+...cnt23)
String lastSumOption = null;
 
//statis_date='' 
String lastWhereOption = null;


//相同天
if (lowerTime.substring(0,10).equals(upperTime.substring(0,10))){
List<String> firstHours = getHourRangeOneDay(lowerTime,upperTime);
firstSumOption  = "sum("+StringUtils.join(firstHours.toArray(),"+")+")";
firstWhereOption = "statis_date='"+lowerTime.substring(0,10)+"'";
zebOption.setFisrtSumOption(firstSumOption);
zebOption.setFisrtWhereOption(firstWhereOption);
zebOption.setFlag("one");
return zebOption;
}

//判断是相邻两天
if (lowerTime.substring(0,10).equals(getSpecifiedDayBefore(upperTime.substring(0,10)))){
List<String> firstHours =getFirstHourRangeOneDay(lowerTime);
List<String> lastHours =getLastHourRangeOneDay(upperTime);
firstSumOption  = "sum("+StringUtils.join(firstHours.toArray(),"+")+")";
firstWhereOption= "statis_date='"+lowerTime.substring(0,10)+"'";
lastSumOption  = "sum("+StringUtils.join(lastHours.toArray(),"+")+")";
lastWhereOption= "statis_date='"+upperTime.substring(0,10)+"'"; 
zebOption.setFisrtSumOption(firstSumOption);
zebOption.setFisrtWhereOption(firstWhereOption);
zebOption.setLastSumOption(lastSumOption);
zebOption.setLastWhereOption(lastWhereOption);
zebOption.setFlag("two");
return zebOption;
}

//下面处理不相邻,且不是同一天的情况
List<String> firstHours =getFirstHourRangeOneDay(lowerTime);
List<String> middleHours =getHourRangeOneDay("1979-01-01 00:00:00","1979-01-01 23:00:00");
List<String> lastHours =getLastHourRangeOneDay(upperTime);

firstSumOption  = "sum("+StringUtils.join(firstHours.toArray(),"+")+")";
firstWhereOption= "statis_date='"+lowerTime.substring(0,10)+"'";
middleSumOption  = "sum("+StringUtils.join(middleHours.toArray(),"+")+")";
middleWhereOption= "statis_date> '"+lowerTime.substring(0,10)+"' and "+ "statis_date<'"+upperTime.substring(0,10)+"'";
lastSumOption  = "sum("+StringUtils.join(lastHours.toArray(),"+")+")";
lastWhereOption= "statis_date='"+upperTime.substring(0,10)+"'"; 

zebOption.setFisrtSumOption(firstSumOption);
zebOption.setFisrtWhereOption(firstWhereOption);
zebOption.setMiddleSumOption(middleSumOption);
zebOption.setMiddleWhereOption(middleWhereOption);
zebOption.setLastSumOption(lastSumOption);
zebOption.setLastWhereOption(lastWhereOption);
zebOption.setFlag("three");

return zebOption;
}
}