其他分享
首页 > 其他分享> > 奇葩需求系列-距离明天十二点倒计时

奇葩需求系列-距离明天十二点倒计时

作者:互联网

#### 需求
产品中有一个分红领取收益,只限制上午十二点之前领取有效,并且只能领取一次(后台限制)。所以需要一个倒计时,有两种情况:
1.今天未超过十二点,eg:11:00  倒计时 01:00 :60
2.今天已超过十二点,eg:13:00 倒计时 23:00:60
#### 效果图
![微信图片_20200220101611.png](https://upload-images.jianshu.io/upload_images/6544435-f6277d4b1d2bae4c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
我用的是kotlin,代码如下:
```
 //倒计时
        job= launch(Dispatchers.Main) {
            while (enableStartTime){
                delay(1000)
              val formatTime =  BonusTimeUtil.stringForTime()
//                logcat("倒计时时间 -----${formatTime}")
                formatTime?.let {
                    val split = it.split(":")
                    tv_time_hour_one.text="${split[0].get(0)}"
                    tv_time_hour_two.text="${split[0].get(1)}"

                    tv_time_minute_one.text="${split[1].get(0)}"
                    tv_time_minute_two.text="${split[1].get(1)}"

                    tv_time_millisecond_one.text="${split[2].get(0)}"
                    tv_time_millisecond_two.text="${split[2].get(1)}"

                }
            }
        }
```
时分秒没有自定义,都是布局添加的。省事~~
时间工具类:
```
 /**
     * 根据当前时间距离明天12点的倒计时,如果当前小于12点就当今天12点的倒计时
     * @return
     */
    public static String stringForTime(){
        //设置明天凌晨的时间 00:00:00,根据明天凌晨时间算距离差
        Calendar instance = Calendar.getInstance();
        instance.add(Calendar.DAY_OF_YEAR,1); //今天新增1
        instance.set(Calendar.HOUR_OF_DAY,0); //小时设置0 ,24小时制
        instance.set(Calendar.SECOND,0);//秒设置0
        instance.set(Calendar.MINUTE,0);//分钟设置0
        instance.set(Calendar.MILLISECOND,0);//毫秒设置0
        long  time = instance.getTime().getTime(); //通过Calendar 重新设置获取到新的时间
        long second =(time - System.currentTimeMillis()) ; //新的时间减去当前的时间,时间差
        //算出时间差中的小时 分钟 秒
        long totalSeconds = second/1000; 
        long seconds = totalSeconds % 60;
        long minutes = (totalSeconds/60)%60;
        long hours = totalSeconds/3600;
        try {
            long nowHour = Long.parseLong(getHours());
        //判断小时是否超过12,判断是否当前时间已经超过上午12点
            if(nowHour < 12){
                hours=11-nowHour;
            }else{
               hours=24-nowHour+11;
            }
            return new Formatter().format("%02d:%02d:%02d",hours,minutes,seconds).toString();
        }catch (Exception e){
            e.printStackTrace();
            return "00:00:00";
        }
    }
    /**
     * 获取当前的小时数进行判断
     *
     * @return
     */
    public static String getHours() {
        Date currentTime = new Date();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return  formatter.format(currentTime).substring(11, 13);
    }
```
仅仅记录此变态需求,如有巧合欢迎借鉴~,有更好的欢迎指出,本人虚心受教。感谢阅读!

南风向北~ 发布了4 篇原创文章 · 获赞 4 · 访问量 7564 私信 关注

标签:00,time,long,倒计时,instance,split,十二点,Calendar,奇葩
来源: https://blog.csdn.net/zhyazaq/article/details/104406432