日期类型匹配方法

应用场景:
 从前台传来一个时间段:开始日期 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;
效果如下:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值