如何计算当前系统时间并存储时间间隔

时间:2019-07-05 12:54:03

标签: java android datetime admob

我想计算当前系统时间并存储时间间隔。我在应用程序中使用admob。当用户点击广告时,我想将当前时间存储在sharedPreferences中,下一个广告应在10分钟后显示。

那么我如何计算sharedPreferences中存储的时间与当前系统时间之间的间隔?

这是我的代码。

 interstitialAd.setAdListener(new AdListener() {

     @Override
     public void onAdClosed() {
         super.onAdClosed();
         startActivity(intent);
         interstitialAd.loadAd(new AdRequest.Builder().build());
     }


     @Override
     public void onAdLoaded() {
         // Code to be executed when an ad finishes loading.
         Toast.makeText(Chapters.this, "loaded", Toast.LENGTH_SHORT).show();

     }

     @Override
     public void onAdFailedToLoad(int errorCode) {
         // Code to be executed when an ad request fails.


     }

     @Override
     public void onAdOpened() {
         // Code to be executed when the ad is displayed.


     }
     @Override
     public void onAdClicked() {

         SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

         // Find todays date
         String currentDateTime = dateFormat.format(new Date()); 
         sharedPreferences=getSharedPreferences("TimeStamp",MODE_PRIVATE);
         SharedPreferences.Editor editor=sharedPreferences.edit();
         editor.putString("currenttime",currentDateTime);
         editor.commit();

     }


     @Override
     public void onAdLeftApplication() {
         // Code to be executed when the user has left the app.
     }
}

1 个答案:

答案 0 :(得分:2)

您使用的是可怕的日期时间类,而这些类早已被JSR 310中定义的现代 java.time 类取代了。

  

来自问题:

     

当用户点击广告时,我想将当前时间存储在sharedPreferences中

UTC中的当前时刻捕获为Instant对象。

Instant instant = Instant.now() ;

生成标准ISO 8601格式的字符串。

String output = instant.toString() ;
  

2019-07-06T04:21:11.091261Z

为简单起见,您可能希望将drop the fractional second设为零。

Instant instant = Instant.now().truncatedTo( ChronoUnit.SECONDS ) ;

将此字符串写入存储空间。

  

来自问题:

     

计算存储在sharedPreferences中的时间与当前系统时间之间的时间间隔?

检索该存储的字符串。解析为Instant对象。

Instant instant = Instant.parse( input ) ;

使用Duration类来计算经过时间。

Duration d = Duration.between( instant , Instant.now() ) ;

健全性检查。

Boolean movingForwardInTime = ( ! d.isNegative() ) && ( ! d.isZero() ) ;
if ( ! movingForwardInTime ) { … }

测试是否超出我们的限制。

Duration limit = Duration.ofMinutes( 10 ) ;
Boolean expired = ( d.compareTo( limit ) > 0 ) ;

关于 java.time

java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendarSimpleDateFormat

要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310

目前位于Joda-Timemaintenance mode项目建议迁移到java.time类。

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

在哪里获取java.time类?