日期字符串拆分算法
来源:互联网 发布:复杂网络的研究方向 编辑:程序博客网 时间: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;
}
}
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;
}
}
阅读全文
0 0
- 日期字符串拆分算法
- 算法导论 思考题 15-9(字符串拆分)
- 拆分字符串
- 字符串拆分
- 拆分字符串
- 拆分字符串
- 拆分字符串
- 拆分字符串
- 拆分字符串
- 字符串拆分
- 拆分字符串
- 字符串拆分
- 拆分字符串
- 字符串拆分
- 拆分字符串
- 拆分字符串
- 拆分字符串的算法,该算法支持中英文
- 简单的拆分字符串和冒泡排序的算法
- 4.shell变量
- spring的重试机制无效@Retryable@EnableRetry
- java 利用反射机制,获取实体所有属性和方法,并对属性赋值
- Find Extra One_Codeforces_900A
- HIVE的transform函数的使用
- 日期字符串拆分算法
- Cenots安装Docker
- 面向对象--(一)
- 用Python从零开始构造决策树
- C#-五层架构开发(一)
- 常用编程语言概述
- 1017. A除以B (20)
- 从现象到原理揭露seo快速排名的面纱
- Jmeter简单介绍与搭配Jenkins实现自动化测试实践