您的位置:首页 > 编程语言 > Java开发

日期类型匹配方法

2012-11-15 15:28 183 查看
应用场景:
从前台传来一个时间段:开始日期 start (如2012-11-05) , 结束时间 end(如2012-11-15), 从数据库查询 从日期 start 到 日期end 之间所有符合条件的数据集合,返回一个 List 对象
例如:
/**
* 返回指定 观测站某时间段内每天8时的水位集合
*/
@Override
public List getDataByStartAndEndTime(String id, String start, String end) {
String time = "08";
String startDate = start + " " + time +":00:00";
String endDate = end + " " + time +":00:00";
String sql = "select stcd, to_char(tm, 'YYYY-MM-DD') tm, rz from st_rsvr_r where stcd = ? and tm <= to_date( ? , 'YYYY-MM-DD hh24:mi:ss') and tm > to_date( ? , 'YYYY-MM-DD hh24:mi:ss') and to_char(tm, 'hh24')= ? order by tm ";
return getJdbcTemplate().queryForList(sql, id, startDate, endDate, time);
}

返回List之后,需要将日期start 到end 之间的某个日期与数据库查询出来的List对象中某个日期进行匹配,new一个数组,数组值依次表示 日期start到end 每日8时的水位值,如果数据库中没有某个日期的记录,那么这天的水位值存为0,方法如下 :(其中startdata1 对应 结束日期 end , enddata 对应 开始日期 start)
/**
* 返回带参某水库水位数据源
* @param startdata1 开始日期
* @param enddata 结束日期
* @param num
* @return
*/
private double[] getWaterLineHelp(String id, String startdata1, String enddata, int num) {
Map<String, String> resultMap = new HashMap<String, String>();
double[] getd = new double[num];
List<Map> list = stRsvrRDao.getDataByStartAndEndTime(id, startdata1, enddata);
if (null != list && !list.isEmpty()) {
for(int i=0; i<list.size(); i++){
Map map = list.get(i);
resultMap.put(map.get("TM") + "", map.get("RZ") + "");
}
}

if (null != getd && getd.length > 0) {
for (int i = 0; i < getd.length; i++) {
String key = DateUtils.getNextDay2(enddata, i+1 + "");
if (resultMap.containsKey(key)) {
getd[i] = Double.parseDouble(resultMap.get(key));
} else {
getd[i] = 0;
}
}
}

return getd;
}
如上代码,遍历List 用Map对象map接收,然后将这个map对象中的日期和水位存入另一个Map对象resultMap中, 然后从开始日期 enddata依次延后 ,跟resultMap对象中的key值匹配,如果相等,就表示这个日期存有水位值,赋值就好;如果没有匹配上,表示数据库没有这个日期的记录,赋值为0;
效果如下:


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐