美文网首页
Java中将数据转换为周月年数据

Java中将数据转换为周月年数据

作者: 你可以叫我老白 | 来源:发表于2021-02-23 09:31 被阅读0次

    前言

    在平常开发中总会碰到相应的数据转换,比如将查询的数据转换为周月年然后在前台以折线图的方式表现。

    提示:以下是本篇文章正文内容,下面案例可供参考

     一、转换步骤

    1.VO类

    import com.fasterxml.jackson.annotation.JsonFormat;

    import lombok.AllArgsConstructor;

    import lombok.Data;

    import lombok.NoArgsConstructor;

    import java.util.Date;

    /**

    * 用户来源渠道统计表

    */

    @Data

    @AllArgsConstructor

    @NoArgsConstructor

    public class StatUserRealnameVO {

        private Integer id;

        /**

        * 统计日期(@JsonFormat:将Date转换成String 一般后台传值给前台时)

        */

        @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")

        private Date statTime;

        /**

        * 当日实名用户数量

        */

        private Integer userRealnameCount;

        /**

        * 当日实名个人用户数量

        */

        private Integer userPersionCount;

        /**

        * 当日实名企业用户数量

        */

        private Integer userBusinessCount;

    }

    注意:可能有时间丢失的状况发生

    2.转换为周数据

    private List<StatUserChannelVO> statUserChannelVOToWeekData(List<StatUserChannelVO> voList) {

            if (voList == null) {

                return null;

            }

            HashMap<Integer, StatUserChannelVO> map = new LinkedHashMap<>();

            for (StatUserChannelVO r : voList) {

                Date date = r.getStatTime();

                Calendar calendar = Calendar.getInstance();

                //先设置一周的第一天为周一,然后存入时间,取出每次时间为第几周并以其为key

                calendar.setFirstDayOfWeek(Calendar.MONDAY);

                calendar.setTime(date);

                int key = calendar.get(Calendar.WEEK_OF_YEAR);

                // 以key取出map中的值

                StatUserChannelVO vo = map.get(key);

    //如果值为空则存入,如果不为空则将相同key的值数据合并,累加数据

                if (vo == null) {

                    vo = new StatUserChannelVO();

                    try {

                        PropertyUtils.copyProperties(vo, r);

                    } catch (Exception e) {

                        log.error("拷贝属性异常:{}", e.getMessage(), e);

                        return null;

                    }

                    //获得某周最后一天,因为默认不是周日

                    int year = calendar.get(Calendar.YEAR);

                    Date dateWeek = getLastDayOfWeek(year, key);

                    vo.setStatTime(dateWeek);

                } else {

                    vo.setUnisoundCount(vo.getUnisoundCount() + r.getUnisoundCount());

                    vo.setSemCount(vo.getSemCount() + r.getSemCount());

                    vo.setOtherCount(vo.getOtherCount() + r.getOtherCount());

                    vo.setNullCount(vo.getNullCount() + r.getNullCount());

                    vo.setUserAllCount(vo.getUserAllCount() + r.getUserAllCount());

                }

                map.put(key, vo);

            }

            Collection<StatUserChannelVO> values = map.values();

            List<StatUserChannelVO> sucvoList = new ArrayList<>(values);

            return sucvoList;

        }

    /**

        * 获得某周最后一天

        *

        * @param year

        * @param week

        * @return

        */

        public static Date getLastDayOfWeek(int year, int week) {

            Calendar cal = Calendar.getInstance();

            //设置年份

            cal.set(Calendar.YEAR, year);

            //设置周

            cal.set(Calendar.WEEK_OF_YEAR, week);

            //设置该周第一天为星期一

            cal.setFirstDayOfWeek(Calendar.MONDAY);

            //设置最后一天是星期日

            cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek() + 6); // Sunday

            //格式化日期

            //SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

            //String lastDayOfWeek = sdf.format(cal.getTime());

            return cal.getTime();

        }

     3.转换为月数据

    //其他上下大致一样只有在日期设置这里有些不同

    Calendar calendar = Calendar.getInstance();

    calendar.setTime(date);

    //因为这个值的初始值是0,因此我们要用它来表示正确的月份时就需要加1。

    int key = calendar.get(Calendar.MONTH) + 1;

    4.转换为年数据

    int key = calendar.get(Calendar.YEAR);

    # 总结

    以上就是今天要讲的内容,本文仅仅简单介绍了ava中将数据转换为周月年数据,更加复杂的数据转换并没有涉及。如果你感觉有用请点赞,如果感觉不错请收藏,如果有什么错误请在下方评论指正。我是老白,我们下期再见。

    相关文章

      网友评论

          本文标题:Java中将数据转换为周月年数据

          本文链接:https://www.haomeiwen.com/subject/nhtdfltx.html