假设我想每天下午02:00自动更改我的textview文本,我如何实现此功能。
val df = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.JAPAN).parse("2:00pm")
val systemDat = Calendar.getInstance(Locale.JAPAN).after(df)
if (systemDat) {
binding.includeTokyoSession.text_one.text = "successful"
} else {
binding.includeTokyoSession.text_one.text = "failure"
}
我想您想在特定时间后更改TextView
的文本,但是似乎您不知道比较时的日期,并且您的代码中有几个错误。
首先,这行代码:
DateFormat.getTimeInstance(DateFormat.SHORT, Locale.JAPAN).parse("2:00pm")
将返回具有本地日期Date
中的日期和时间的01-01-1970 02:00:00
实例。但是,您需要获得一个Date
实例,其中包含今天的日期和时间14:00:00
。
第二,这行代码:
Calendar.getInstance(Locale.JAPAN).after(df)
这是Calendar::after()
函数的错误用法,这是因为您只能将Calendar
对象传递给该函数以获得正确的比较结果,否则它将始终返回false。
在您的情况下,您正在传递Date
对象。
下面是Calendar::after()
函数的实现。
public boolean after(Object when) {
return when instanceof Calendar
&& compareTo((Calendar)when) > 0;
}
如果您想将今天的当前时间与14:00
进行正确的比较(仅比较今天的时间),这是对代码的修改:
val calendarToCompare = Calendar.getInstance(Locale.JAPAN).apply {
set(Calendar.HOUR_OF_DAY, 14)
set(Calendar.MINUTE, 0)
set(Calendar.SECOND, 0)
set(Calendar.MILLISECOND, 0)
}
val systemDat = Calendar.getInstance().after(calendarToCompare)
if (systemDat) {
textview.text = "successful"
} else {
textview.text = "failure"
}
如果要执行生命周期感知的视图更新(例如,设置文本视图的文本),则可以选中此gist。