首页 > 解决方案 > 如何在 kotlin android 中比较日期和时间?

问题描述

我在 PlayStore 上有一个应用程序,我正在构建一个功能,用户在一天内看到的广告不会超过特定数量。

我正在考虑将当前日期和时间与之前保存的日期和时间进行比较,但还没有找到合适的方法来做到这一点。

如何比较日期和时间以了解 24 小时是否已过?

我发现但没有帮助的一些帖子:

媒体网

堆栈溢出

堆栈溢出

标签: androidandroid-studiodatetimekotlin

解决方案


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 以了解更多信息,因为这已被多次介绍。


推荐阅读