android - 如何在 kotlin android 中比较日期和时间?
问题描述
我在 PlayStore 上有一个应用程序,我正在构建一个功能,用户在一天内看到的广告不会超过特定数量。
我正在考虑将当前日期和时间与之前保存的日期和时间进行比较,但还没有找到合适的方法来做到这一点。
如何比较日期和时间以了解 24 小时是否已过?
我发现但没有帮助的一些帖子:
解决方案
tl;博士
[此答案使用 Java 语法。你必须翻译成 Kotlin 语法。]
if
(
Duration // Represents elapsed time on the scale of hours-minutes-seconds.
.between( // Calculates elapsed time between two points in time.
Instant.parse( "2021-03-23T15:30:57.013678Z" ) , // Last moment when an ad was show.
Instant.now() // Current moment.
) // Returns a `Duration` object.
.toHours() // Extract total number of whole hours from the `Duration` object.
>= 24L // Test if equals-to or greater-than 24 hours.
)
{ show ad }
java.time
您问:
... 知道 24 小时是否已过?
使用JSR 310 中定义的现代java.time类。java.time类内置于 Android 26 及更高版本中。大多数功能在早期的 Android 中都可以使用最新工具的“API 脱糖”。
Instant adShown = Instant.parse( "2021-03-23T15:30:57.013678Z" ) ;
Instant now = Instant.now() ;
Duration d = Duration.between( adShown , now ) ;
long hoursSinceAdShown = d.toHours() ;
if( hoursSinceAdShown >= 24L ) { … show ad }
将您的下一个广告展示记录为标准 ISO 8601 格式的文本。
String output = Instant.now().toString() ;
2021-03-23T15:30:57.013678Z
您的问题要求两件不同的事情:
- 每天一次
- 每 24 小时
第一个涉及日历、日期和时区。第二个没有。我向您展示了第二个代码。
您可以使用预定的执行器服务从后台线程触发广告在特定时刻的下一次展示。搜索 Stack Overflow 以了解更多信息,因为这已被多次介绍。
推荐阅读
- google-calendar-api - ExtendedProperty 在获取事件 api 响应中不可用
- php - 在表格循环中使用 AJAX 提交表单
- java - org.apache.chemistry.opencmis.commons.exceptions.CmisUnauthorizedException:未经授权
- php - 有没有办法在不打印响应的情况下执行这个 CURL 请求?
- c# - 在客户端下载文件以响应 API
- dialogflow-es - 为什么 Dialogflow 的此实现代码不起作用?
- laravel - laravel 的 Illuminate\Database\Eloquent\Builder 有什么作用?
- java - java.lang.ClassNotFoundException: org.apache.commons.collections.ListUtils 当代码在服务器上执行时
- c# - 使用快捷键最小化和恢复窗口
- google-sheets - 识别具有重复条目的行并添加列值