时间以半点为单位相连的算法

协变苔原
• 阅读 1728

背景

在做广点通信息流数据获取的时候有这么一个字段:time_series 投放时间段,格式为 48 * 7 位字符串,且都为 0 和 1,以半个小时为最小粒度,从周一零点开始至周日 24 点结束。0 为不投放,1 为投放,全传 1 视为全时段投放,不允许全部传 0。朋友圈广告的投放时间需大于等于 6 小时,小于等于 30 个自然日,且每天投放的时段需保持一致。在实际的数据获取返回结果为:

000000000000001111111111111000000011111111111111000000000000001111111111111000000011111111111111000000000000001111111111111000000011111111111111000000000000001111111111111000000011111111111111000000000000001111111111111000000011111111111111000000000000001111111111111000000011111111111111000000000000001111111111111000000011111111111111

需求方提出需要将此字段进行格式化,格式化后的字段格式为:

[1, 2, 3, 4, 5, 6, 7]7:00-13:30,17:00-24:00

方法

由于时间比较紧促,简单写了个方法记录下,后面再回来

    private String formatTimeSeries(String timeSeries)
    {
        Map<Integer, List<String>> weekTimeMap = new LinkedHashMap<>();
        if(!timeSeries.matches("[0-1]{336}")) {
            return "";
        }
        for (int i = 0; i < timeSeries.length(); i++) {
            if(!String.valueOf(timeSeries.charAt(i)).equals("1")) {
                continue;
            }
            int day = i/48 + 1;
            List<String> list = weekTimeMap.get(day);
            if(null == list) {
                list = new ArrayList<>();
            }
            list.add((i%48)/2+(i%48%2==1?":30":":00"));
            weekTimeMap.put(day,list);
        }
        Map<String, List<Integer>> timeWeekMap = new HashMap<>();
        for(Integer i : weekTimeMap.keySet()){
            List<String> list = weekTimeMap.get(i);
            String formatTimeSeries = "";
            while (list.size() > 0) {
                String startTime = list.get(0);
                list.remove(0);
                String startHour = startTime.split(":")[0];
                String startMinute = startTime.split(":")[1];
                String endTime = startMinute.equals("30") ? (Integer.valueOf(startHour) + 1) + ":00" : startHour + ":30";
                while (list.contains(endTime)) {
                    list.remove(endTime);
                    String endHour = endTime.split(":")[0];
                    String endMinute = endTime.split(":")[1];
                    endTime = endMinute.equals("30") ? (Integer.valueOf(endHour) + 1) + ":00" : endHour + ":30";
                }
                formatTimeSeries += (formatTimeSeries.length() == 0 ? "" : ",") + startTime + "-" + endTime;
            }
            List<Integer> timeList = timeWeekMap.get(formatTimeSeries);
            if(null == timeList) {
                timeList = new ArrayList<>();
            }
            timeList.add(i);
            timeWeekMap.put(formatTimeSeries, timeList);
        }
        String formatTimeSeries = "";
        for(String time : timeWeekMap.keySet()){
            formatTimeSeries += (formatTimeSeries.length() == 0 ? "" : ";") + timeWeekMap.get(time).toString() + time;
        }
        return formatTimeSeries;
    }
点赞
收藏
评论区
推荐文章
专注IP定位 专注IP定位
4年前
IP数据库的定位能力在商业端的具体应用有哪些?(一)
IP数据库包含全球43亿全量IPv4与2^128全量IPv6,数据库版本分为高精准公安版、高精准商业版、区县级、城市级和IPv6共5个版本。IP数据库主要解决的痛点为互联网广告精准投放、内容精准推荐、用户位置画像、重点企业办公网络资产普查,网络攻击溯源&取证、嫌疑人地理位置定位、服务器优化分配等。互联网在线广告精准投放基于IP地理位置的在线广告投放,提高广
小白从0到1学习app开发,以APICloud为例
小白如何开发APP,需要学习哪些知识?可以从0到1完成一个APP的开发。第一步,注册选择开发工具有一些教程上会说先创建应用,再选择工具,是使用的控制台创建的https://www.apicloud.com/studio3APICloudStudio3工具的教程https://docs.apicloud.com/DevTools/studio3visu
常见五大广告投放问题!从问题背后总结规律!
做电商广告投放,总是广告投放的多,收到的回报少。广告投放的学问是长期学习的过程,需要日积月累累计起来的经验,今天就收集了几个问题,来给大家解答一下,五大关于。1.转化少点击少展现没问题,就是创意排名有问题吧?答:思路没错,点击量少自然转化量也不会提升,而点击量展现量点击率,展现量正常点击量低,主要是点击率的问题,影响点击率问题的环节就是广告创意。做信息流投
Stella981 Stella981
3年前
MediaWiki投放广告代码的几种办法
很多年前就用MediaWiki并投放GoogleAdSense广告,中间也很多次修改过广告代码及投放方式,最近又在升级MediaWiki软件,也对广告投放进行了一些调整,现在小结一下我用过的几种广告代码投放方式:最简单直接的整站投放办法是修改皮肤文件,例如MonoBook.php或者Vector.php等,把广告代码放在需要放置的位置代码前后;
Stella981 Stella981
3年前
IP数据库的定位能力在商业端的具体应用有哪些?(一)
IP数据库包含全球43亿全量IPv4与2^128全量IPv6,数据库版本分为高精准公安版、高精准商业版、区县级、城市级和IPv6共5个版本。IP数据库主要解决的痛点为互联网广告精准投放、内容精准推荐、用户位置画像、重点企业办公网络资产普查,网络攻击溯源&取证、嫌疑人地理位置定位、服务器优化分配等。互联网在线广告精准投放基于I
Easter79 Easter79
3年前
TiDB 助力卡思数据视频大数据业务创新
作者:刘广信,火星文化技术经理卡思数据是国内领先的视频全网数据开放平台,依托领先的数据挖掘与分析能力,为视频内容创作者在节目创作和用户运营方面提供数据支持,为广告主的广告投放提供数据参考和效果监测,为内容投资提供全面客观的价值评估。!图1卡思数据产品展示图(https://download.pingcap.com/images/blog
定时任务优化总结(从半个小时优化到秒级)
整体优化思路:1.按需查询、2.分小批次游标查询、3.JED场景下按数据库分片分组更新、4.精准定位要处理的数据、5.负载均衡业务背景:站外广告投放平台在做推广管理状态优化重构的时候,引入了四个定时任务。分别是单元时间段更新更新任务,计划时间段更新任务,单
百舸实践之「埋点数据深度治理与应用」 | 京东云技术团队
一、背景随着公司和业务的不断发展,百舸平台也从单一内容投放转向了以流量和数据为基础的流量运营模式。在这个转变过程中,数据深度治理与应用的重要性尤为凸显,在数据深度治理过程中,需要将用户行为数据、投放素材以及投放效果三者紧密的串联起来。数据深度治理和应用,一
京东云开发者 京东云开发者
10个月前
京东广告投放平台整洁架构演进之路
作者:京东零售赵嘉铎前言从去年开始京东广告投放系统做了一次以领域驱动设计为思想内核的架构升级,在深入理解DDD思想的同时,我们基于广告投放业务的本质特征大胆地融入了自己的理解和改造。新架构是从设计思想到落地框架都进行了彻底的革新,涉及内容比较多,因此我们希
协变苔原
协变苔原
Lv1
夜闻归雁生乡思,病入新年感物华。
文章
5
粉丝
0
获赞
0