java后台返回当前日期前30天的数据并排序
来源:互联网 发布:淘宝网韩国身体去角质 编辑:程序博客网 时间:2024/05/17 07:11
项目中遇到需要给前端返回30天的血糖数据,数据库中,只有当用户输入血糖才会有数据,所以后台需要把没有的数据补0。
思路是先使用工具类WeekUtil 获取当前日期的前30天日期,放在map中,键为时间,值为0,然后查出30天内的数据库的血糖记录list,遍历list,将数据放入到map中,然后将map中数据放入vo集合中,并按照对象属性createTime进行排序。
weekUtils代码如下:
package com.wellness.platfront.common.util;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Calendar;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;/** * 获取当天所在的一周的日期工具类 * */public class WeekUtil { private static WeekUtil instance = new WeekUtil(); private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); private WeekUtil(){} public static WeekUtil getInstance(){ return instance; } /** * 根据传入时间获取 该时间所在的一周的日期 * @param date 传入时间参数 * @return */ public static Map<String,Date> weekDateOfToday(Date date){ Map<String,Date> weekMap = new HashMap<>(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd 00:00:00"); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); try { //周一 calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); Date mon = calendar.getTime(); //周二 calendar.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY); Date tues = calendar.getTime(); //周三 calendar.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); Date wen = calendar.getTime(); //周四 calendar.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY); Date thur = calendar.getTime(); //周五 calendar.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY); Date fri = calendar.getTime(); //周六 calendar.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY); String satday = simpleDateFormat.format(calendar.getTime()); Date sat = simpleDateFormat.parse(satday); //周天 calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); String sunday = simpleDateFormat.format(calendar.getTime()); Date sun = simpleDateFormat.parse(sunday); weekMap.put("monday",mon); weekMap.put("tuesday",tues); weekMap.put("wednesday",wen); weekMap.put("thursday",thur); weekMap.put("friday",fri); weekMap.put("saturday",sat); weekMap.put("sunday",sun); }catch (Exception e){ e.printStackTrace(); } return weekMap; } /** * 根据传入时间获取 该时间所在的一周的日期 * @param date 传入时间参数 * @return */ public static List<String> weekDayOfToday(Date date){ List<String> weekList = new ArrayList<>(); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("d"); //周一 calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); String mon = simpleDateFormat.format(calendar.getTime()); //周二 calendar.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY); String tues = simpleDateFormat.format(calendar.getTime()); //周三 calendar.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY); String wen = simpleDateFormat.format(calendar.getTime()); //周四 calendar.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY); String thur = simpleDateFormat.format(calendar.getTime()); //周五 calendar.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY); String fri = simpleDateFormat.format(calendar.getTime()); //周六 calendar.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY); String sat = simpleDateFormat.format(calendar.getTime()); //周天 calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); String sun = simpleDateFormat.format(calendar.getTime()); weekList.add(sun); weekList.add(mon); weekList.add(tues); weekList.add(wen); weekList.add(thur); weekList.add(fri); weekList.add(sat); return weekList; } /** * 获取当前输入时间所在月份的所有 天 * @return */ public static List<String> getDaysOfNowMonth(){ List<String> monthDayList = new ArrayList<>(); SimpleDateFormat format = new SimpleDateFormat("d"); Calendar ca = Calendar.getInstance(); ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH)); //获取当月最后一天 Integer last = Integer.parseInt(format.format(ca.getTime())); for (int i = 1;i <= last;i++ ){ monthDayList.add(i+""); } return monthDayList; } /** * 获取当前输入时间所在月份的所有日期 * @return */ public static Map<String,Date> getDateOfNowMonth(){ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd 00:00:00"); Map<String,Date> dateMap = new HashMap<>(); Calendar ca = Calendar.getInstance(); ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH)); Calendar c = Calendar.getInstance(); c.add(Calendar.MONTH, 0); c.set(Calendar.DAY_OF_MONTH,1); try { //第一天 String firstDateStr = simpleDateFormat.format(c.getTime()); Date firstDate = simpleDateFormat.parse(firstDateStr); //最后一天 String lastDateStr = simpleDateFormat.format(ca.getTime()); Date lastDate = simpleDateFormat.parse(lastDateStr); dateMap.put("firstDay",firstDate); dateMap.put("lastDay",lastDate); }catch (Exception e){ e.printStackTrace(); } return dateMap; } /** * 获取今日前number日的日期 * @param number * @return */ public static Date getDayFromToday(Integer number){ try { Calendar c = Calendar.getInstance(); c.setTime(new Date()); c.add(c.DAY_OF_YEAR, -number); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); String date = simpleDateFormat.format(c.getTime()); return simpleDateFormat.parse(date); }catch (Exception e){ e.printStackTrace(); } return null; } /** * 获取今日的日期 * @return */ public static Date getDayToday(){ try { Date date = new Date(); Calendar c = Calendar.getInstance(); c.setTime(date); c.add(Calendar.DAY_OF_MONTH, 1); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); String dateStr = simpleDateFormat.format(c.getTime()); return simpleDateFormat.parse(dateStr); }catch (Exception e){ e.printStackTrace(); } return null; } public static List<String> getMonthDayList(){ List<String> dayList = new ArrayList<>(); dayList.add("7"); dayList.add("14"); dayList.add("21"); dayList.add("28"); return dayList; } /** * 返回两个时间之间相差多少天 * @param now * @param past * @return */ public static Integer dayNumberBetweenToDate(Date now , Date past){ try { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); String pastString = simpleDateFormat.format(past); Date pastDate = simpleDateFormat.parse(pastString); return (int)(((now.getTime() - pastDate.getTime() )/ (1000 * 3600 * 24))); }catch (Exception e){ e.printStackTrace(); } return null; } /** * 获取当前日期前30天的日期(用于返回30天内血糖和血压) */ public static Map<String, String> getDayMap(){ try { Calendar calc =Calendar.getInstance(); Map<String, String> bloodMap = new HashMap<String, String>(); for(int i=0;i<30;i++){ calc.setTime(new Date()); calc.add(calc.DATE, -i); Date minDate = calc.getTime(); bloodMap.put(sdf.format(minDate), "0"); } return bloodMap; } catch (Exception e) { e.printStackTrace(); } return null; } }
BloodGlucoseVo为返回给前端的vo:
package com.wellness.platfront.entity.healthCenter.vo;/** * 血糖的vo * @author * @since 2017/09/26 */public class BloodGlucoseVo { /** * 血糖值 */ private String value; /** * 创建时间 */ private String createTime; public String getValue() { return value; } public void setValue(String value) { this.value = value; } public String getCreateTime() { return createTime; } public void setCreateTime(String createTime) { this.createTime = createTime; }}
service实现类中的方法:
package com.wellness.platfront.business.healthCenter.service.impl;import com.wellness.platfront.business.healthCenter.service.BloodGlucoseService;import com.wellness.platfront.business.healthCenter.validate.BloodValidate;import com.wellness.platfront.business.member.service.MemberService;import com.wellness.platfront.common.core.dao.primitive.HibernateDao;import com.wellness.platfront.common.core.service.impl.BasicServiceImpl;import com.wellness.platfront.common.exception.BasicRuntimeException;import com.wellness.platfront.common.util.WeekUtil;import com.wellness.platfront.entity.healthCenter.BloodGlucose;import com.wellness.platfront.entity.healthCenter.vo.BloodGlucoseVo;import com.wellness.platfront.entity.member.Member;import org.apache.commons.beanutils.BeanComparator;import org.apache.commons.collections.ComparatorUtils;import org.apache.commons.collections.comparators.ComparableComparator;import org.hibernate.Criteria;import org.hibernate.SessionFactory;import org.hibernate.criterion.Order;import org.hibernate.criterion.Restrictions;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Transactional;import javassist.expr.NewArray;import javax.annotation.Resource;import java.text.DecimalFormat;import java.text.SimpleDateFormat;import java.util.*;/** * @author * @version 创建时间:2017年5月31日 * 血糖接口实现类 */@Service("bloodGlucoseService")@Transactionalpublic class BloodGlucoseServiceImpl extends BasicServiceImpl<BloodGlucose, Integer> implements BloodGlucoseService { @Resource private SessionFactory sessionFactory; @Resource private MemberService memberService; Calendar calendar = Calendar.getInstance(); private HibernateDao<BloodGlucose, Integer> dao = new HibernateDao<>(sessionFactory, BloodGlucose.class); private SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-dd"); /** * 查询最近30天的血糖记录 */ @Override public List<BloodGlucoseVo> getMonthBloodSugar(Integer memberId) { try { //定义排序规则 Comparator mycmp = ComparableComparator.getInstance(); //reversedComparator 为倒序排序,默认为正序, mycmp = ComparatorUtils.reversedComparator(mycmp); //如果要自定义的排序规则,需在bean的属性后加上,如果默认则不用加,"createTime"为集合对象中的属性 BeanComparator bc = new BeanComparator("createTime",mycmp); List<BloodGlucoseVo> list = new ArrayList<>(); calendar.setTime(new Date()); calendar.add(Calendar.DATE, -30); Date firstDate = calendar.getTime(); Criteria criteria = dao.createCriteria(); criteria.add(Restrictions.eq("member.memberId", memberId)); criteria.add(Restrictions.ge("createTime", firstDate)); criteria.add(Restrictions.le("createTime", new Date())); criteria.addOrder(Order.desc("createTime")); List<BloodGlucose> bloodGlucoses = criteria.list(); //获取30天的日期集合 Map<String, String> dayMap = WeekUtil.getDayMap(); if (bloodGlucoses.size()>0) { BloodGlucoseVo bloodGlucoseVo; //将数据库查询的list集合数据放入map中 for (int j = 0; j < bloodGlucoses.size(); j++) { //需要将时间格式化成与map返回的时间一样格式 yyyy-MM-dd 并将时间和血糖值放入map中覆盖原来的value dayMap.put(dateFormat.format(bloodGlucoses.get(j).getCreateTime()), bloodGlucoses.get(j).getValue()); } //将map中的数据放入对应list中 for (String day : dayMap.keySet()) { bloodGlucoseVo = new BloodGlucoseVo(); bloodGlucoseVo.setValue(dayMap.get(day)); bloodGlucoseVo.setCreateTime(day); list.add(bloodGlucoseVo); bloodGlucoseVo = null; } //将返回数据的list按照时间排序 Collections.sort(list, bc); } return list; } catch (Exception e) { log.error(e.getMessage()); throw new BasicRuntimeException(this, "获取最近三十天的血糖记录异常" + e.getMessage()); } }}
阅读全文
0 0
- java后台返回当前日期前30天的数据并排序
- 根据后台返回的日期排序数据
- java 获取当前日期 前10天的日期
- java取当前日期的前天后台前一个月等
- java 获取当前时间前7天的日期
- java获取当前日期前N天
- java计算距当前时间30天前的日期和时间
- java 获取当前日期的前一个月的日期
- 验证当前日期是否为一年中最后一天,否则,默认返回当前日期前一年的最后一天日期
- linux获取当前日期多少天前的日期
- 获得当前输入日期前(后)x天的日期
- java,取30天前的日期
- java 获取当前日期的前三月,前一天
- PHP如何获取当前日期前30天的具体日期
- JAVA 日期获得30天前的日期
- java实现 取当前时间的前7天的日期
- JSP将后台返回的数据显示并分页
- json 请求后台,并接受返回的list数据
- swift 4.0 版本 无限轮播图
- Python中flatten,matrix.A用法
- 手把手教你用7行代码实现微信聊天机器人 -- Python wxpy
- spring boot 的事务管理
- linux IO子系统和文件系统读写流程
- java后台返回当前日期前30天的数据并排序
- oracle 11g,创建用户,表空间,赋予用户权限,导入dmp
- 匠牛社区AM5728开发板开机登陆
- Python中的X[:,0]和X[:,1]
- input type=“color”
- echarts jsp实时更新动态折线图
- 五分钟学GIS | 立体效果地图制作
- 如何成为一名全栈语音识别工程师?
- 常见yuv转rgb