LiiYuan

导航

 

创建定时器对象:
kotlin
val timer = Timer()
设定定时任务和间隔时间:
kotlin
timer.scheduleAtFixedRate(object : TimerTask() {
override fun run() {
// 执行定时任务
}
}, delay, period)
启动和停止定时器:
kotlin
timer.start()
timer.cancel()
倒计时(Countdown Timer):

创建倒计时对象:
kotlin
object : CountDownTimer(totalTime, interval) {
override fun onTick(millisUntilFinished: Long) {
// 每次倒计时间隔执行的操作
}

override fun onFinish() {
    // 倒计时结束时执行的操作
}

}.start()
时间格式转换:

将时间戳转换为特定格式的日期和时间:
kotlin
val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault())
val formattedTime = sdf.format(Date(timestamp))
将日期和时间字符串转换为时间戳:
kotlin
val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault())
val date = sdf.parse("2024-02-28 14:30:00")
val timestamp = date.time
闹钟和提醒:

创建闹钟提醒功能:
使用 AlarmManager 和 BroadcastReceiver 实现闹钟功能
在 BroadcastReceiver 中处理闹钟响铃事件
通过以上步骤,您可以开始学习和实践在 Android 开发中使用 Kotlin 进行时间处理的基本操作。如果您遇到任何问题或需要进一步解释,请随时告诉我,我会尽力帮助您。祝您学习顺利!


获取当前时间

获取时间的所有信息

两种方法,变量为Data数据类型
Date:表示特定的时间点,存储为自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数。

        val calendar=Calendar.getInstance()
        val currentTime = calendar.time

        val currentTime2 = Date()

time1,time2均输出
"Wed Feb 28 14:44:08 GMT+00:00 2024"

对时间的输出打印

//直接输出原始string
logd: currentTime.toString()

SimpleDateFormat 格式化日期和时间显示

//修饰处理
val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault())
val formattedTime = sdf.format(currentTime)
参数一时间修改


点击查看代码
val usLocale=Locale("en","us")
        val sdf = SimpleDateFormat("" +
                "年:YYYYYYYY-YYYY--YY-Y-yyyy-yy-y\n" +
                "月:MMMM-MM-M\n" +
                "日:dddd-dd-d\n" +
                "星期:EEEE-EE-E-eeee-ee-e\n" +
                "时:HHHH-HH-H\n hhhh-hh-h\n" +
                "分:mmmm-mm-m\n" +
                "秒:ssss-ss-s\n" +
                "毫秒:SSSS-SS-S\n" +
                "上下午:AAAA-AA-A- aaaa-aa-a\n" +
                "一年中的第几周wwww-ww-w\n" +
                "一年中的第几天DDDD-DD-D\n" +
                "这个月的第几周:WWWW-WW-W\n" +
                "这个月的第几次这个星期几:FFFF-FF-F\n" +
                "今天第几小时kk==HH(1-24)\n" +
                "今天第几小时12制KK==HH(1-12)\n" +
                "时区zz,ZZ,\n" +
                "标志GG,gg", usLocale)
/**
  SimpleDateFormat函数语法:
 
  G 年代标志符
  y 年
  M 月
  d 日
  h 时 在上午或下午 (1~12)
  H 时 在一天中 (0~23)
  m 分
  s 秒
  S 毫秒
  E 星期
  D 一年中的第几天
  F 一月中第几个星期几
  w 一年中第几个星期
  W 一月中第几个星期
  a 上午 / 下午 标记符
  k 时 在一天中 (1~24)
  K 时 在上午或下午 (0~11)
  z 时区
 */
参数二、本地化处理
默认本地化,可空
非本地化处理
val usLocale=Locale("en","us")
        val sdf = SimpleDateFormat("YYYY-M-d ee-MM-d H:m:s", usLocale)

反转,输入日期,获得时间

val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault())
        val date = sdf.parse("2024-02-28 14:30:00")

Timer()

UI界面变化要用runOnUiThread{}
delay延时,period间隔

val timer=Timer()
        timer.scheduleAtFixedRate(object : TimerTask() {
            override fun run() {
                // 执行定时任务
                runOnUiThread {
                    binding.show.text = getCurrentTimeToFormat()
                }
            }
        }, 10*1000, 1000)
// 第二个定时任务
timer.scheduleAtFixedRate(object : TimerTask() {
    override fun run() {
        // 执行第二个定时任务
        // 在这里添加第二个定时任务的逻辑
    }
}, delay2, period2)

倒计时

val timer=Timer()
        timer.schedule(object : TimerTask() {
            override fun run() {
                // 执行定时任务
                runOnUiThread {
                    binding.show.text = Date().toString()
                }
            }
        }, 5*1000)

cancel():取消 Timer 对象的所有计划任务。
purge():从任务队列中移除所有已经取消的任务。
schedule(TimerTask task, Date time):在指定的时间执行一次任务。
schedule(TimerTask task, long delay):延时指定时间后执行一次任务。
schedule(TimerTask task, Date firstTime, long period):在指定时间开始,以固定速率重复执行任务。
schedule(TimerTask task, long delay, long period):延时指定时间后开始,以固定速率重复执行任务。
scheduleAtFixedRate方法会按照指定的时间间隔来执行任务,而不考虑任务的实际执行时间;而schedule方法会在上一个任务完成后延时指定时间后再执行下一个任务。
如果任务的执行时间比指定的时间间隔还要长,scheduleAtFixedRate方法会立即开始下一个任务,而schedule方法会等待上一个任务完成后再开始下一个任务。

一开始就间隔,然后倒计时停止

val timer=Timer()
        var count=0
        timer.schedule(object : TimerTask() {
            override fun run() {
                // 执行定时任务

                runOnUiThread {
                    count++
                    binding.show.text = Date().toString()
                    if(count>=5){
                        cancel()
                    }
                }
            }
        }, 5*1000,1000)

CountDownTimer

倒计时总共时间,倒计时间隔时间
需要重写两个

val countDownTimer=object:CountDownTimer(6000,1000){
//每个时间间隔干什么
           override fun onTick(millisUntilFinished: Long) {
               binding.show.text=getCurrentTimeToFormat()
           }
//倒计时结束后做什么
           override fun onFinish() {
               binding.show.text=getCurrentTimeToFormat()+"6666666666666"
           }
       }
        countDownTimer.start()

Handler对时间处理

基本写法

创建

val handler = Handler(Looper.getMainLooper())
       handler.postDelayed({
            binding.show.text=Date().toString()
       },10000)
       handler.postDelayed({
            binding.show.text=Date().toString()
       },20000)

删除handler.removeCallbacks(runnable)

 val handler = Handler(Looper.getMainLooper())
// 第一个延时任务
        val secondTask = Runnable {
            // 第二个延时任务逻辑 }
        val firstTask = Runnable {
            // 第一个延时任务逻辑,1秒后执行
            // 在这里删除第二个延时任务
            handler.removeCallbacks(secondTask)
        }
        handler.postDelayed(firstTask, 2000)
        handler.postDelayed(secondTask, 4000)

延时任务

handler.postDelayed(secondTask, 4000)

循环任务

val handler = Handler(Looper.getMainLooper())
//val runnable=Runnable{简写,只有run这个方法的时候}
val runnable = object : Runnable {
    override fun run() {
        // 循环执行的任务逻辑
        handler.postDelayed(this, 1000) // 每隔1秒执行一次
    }
//可以当对象使用?
    fun other(){}
}
handler.postDelayed(runnable, 1000) // 第一次延时1秒后执行

// 在需要停止任务的地方调用
handler.removeCallbacks(runnable)
val runnable=object :Runnable{
    override fun run() {
        binding.show.text=Date().toString()
        handler.postDelayed(this,1000)
    }
    fun ff(d:Int){
        binding.show.text="666"
        handler.postDelayed(this,d*1000.toLong())
    }

}
        runnable.ff(6)
posted on 2024-03-05 20:06  李ly  阅读(31)  评论(0编辑  收藏  举报