2021-01-06 安卓实现倒计时

最近写了一个倒计时,应公司要求,到年底要完成的任务

用DatePickerDialog可以选择年月日,但是项目要求到春节放假,所以日期是固定的,但是将选择日期的代码附上


        val calendar = Calendar.getInstance()
        val year = calendar[Calendar.YEAR]
        val month = calendar[Calendar.MONTH]
        val day = calendar[Calendar.DAY_OF_MONTH]
        val datePickerDialog = DatePickerDialog(
            this,
            { view, year, month, dayOfMonth -> setBir(year, month, dayOfMonth) },
            year,
            month,
            day
        )
        datePickerDialog.setMessage("倒计时")
        datePickerDialog.show()

   fun setBir(year: Int, month: Int, dayOfMonth: Int) {
        //设置数据到实体中,自动刷新界面
        tv_text.text = (year.toString() + "年" + (month + 1) + "月" + dayOfMonth + "日")
        //刷新实体,驱动界面更新
//        entity.notifyChange()
        tv_text.text = year.toString()+"-"+(month+1)+"-"+dayOfMonth+" "+"00:00:00"
    }

下面来实现倒计时:

private fun setTime() {
        @SuppressLint("SimpleDateFormat") val simpleDateFormat// ★★★格式("yyyy-MM-dd HH:mm:ss")一定要写对★★★   不然会出现时间错乱
                = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
        try {
            // Date nowTime = new Date(System.currentTimeMillis()); //获取当前时间的另一种
            val nowTime = System.currentTimeMillis() //获取当前时间
            val overTime =
                simpleDateFormat.parse(failureTime) //利用SimpleDateFormat来把字符串日期转换为Date对象类型
            val a = overTime.time - nowTime // 计算总的时间差(毫秒级别)
            if (a > 0) { //如果大于零 说明时间有剩余

                // 总时间(a)
                // 总天数( day*(1000 * 60 * 60 * 24) )
                // 总小时数( hour * (1000 * 60 * 60) )
                // 总分钟数( minute * (1000 * 60) )

                // 总时间 中有几天
                val day = a / (1000 * 60 * 60 * 24)
                // 总时间 去除天数后,还剩多少小时
                val hour = (a - day * (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)
                // 总时间 去除天数与小时后,还剩多少分钟
                val minute =
                    (a - day * (1000 * 60 * 60 * 24) - hour * (1000 * 60 * 60)) / (1000 * 60)
                // 总时间 去除天数小时与分钟后,还剩多少秒
                val second =
                    (a - day * (1000 * 60 * 60 * 24) - hour * (1000 * 60 * 60) - minute * (1000 * 60)) / 1000
                //刷新ui显示
                textView!!.text = "剩余:" + day + "天" + hour + "时" + minute + "分" + second + "秒"
            } else {
                Toast.makeText(this, "小于等于零", Toast.LENGTH_SHORT).show()
            }
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }

主要代码,备注很详细,大家都能看懂

下面使用

   private var failureTime: String? = "2021-12-05 16:19:45" // 失效时间

    @SuppressLint("HandlerLeak")
    private val handler: Handler = object : Handler() {
        override fun handleMessage(msg: Message) {
            super.handleMessage(msg)
            setTime()
            // 在handleMessage发送handle消息实现无限刷新
            sendMessageDelayed(this.obtainMessage(), 1000) // 延迟一秒发送,1秒刷新一次
        }
    }


这个是开启,放在需要开启的地方即可

  handler.sendMessage(handler.obtainMessage()) // 在这里开始 时间计时

效果图奉上,样式不重要,

2021-01-06 安卓实现倒计时_第1张图片2021-01-06 安卓实现倒计时_第2张图片

你可能感兴趣的:(2021-01-06 安卓实现倒计时)