创建定时器对象:
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)