我想计算当前系统时间并存储时间间隔。我在应用程序中使用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.
}
}
答案 0 :(得分:2)
您使用的是可怕的日期时间类,而这些类早已被JSR 310中定义的现代 java.time 类取代了。
来自问题:
当用户点击广告时,我想将当前时间存储在sharedPreferences中
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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和SimpleDateFormat
。
要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310。
目前位于Joda-Time的maintenance mode项目建议迁移到java.time类。
您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
在哪里获取java.time类?