как рассчитать текущее системное время и сохранить временной интервал - PullRequest
1 голос
/ 05 июля 2019

Я хочу рассчитать текущее системное время и сохранить интервал времени.Я использую 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 Ответ

2 голосов
/ 05 июля 2019

Вы используете ужасные классы даты и времени, которые были вытеснены несколько лет назад современными java.time классами, определенными в JSR 310.

Из Вопроса:

Когда пользователь нажимает на рекламу, я хочу сохранить текущее время в sharedPreferences

Захватить текущий момент в UTC как объект Instant.

Instant instant = Instant.now() ;

Генерация строки в стандартном формате ISO 8601 .

String output = instant.toString() ;

2019-07-06T04: 21: 11.091261Z

Вы можете уменьшить дробную секунду до нуля для простоты.

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 встроен в Java8 и позже.Эти классы вытесняют проблемные старые устаревшие классы даты и времени, такие как java.util.Date, Calendar, & SimpleDateFormat.

Чтобы узнать больше, см. Oracle Tutorial .И поиск переполнения стека для многих примеров и объяснений.Спецификация: JSR 310 .

Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на java.time классы.

Вы можете обмениваться java.time объектами напрямую с вашей базой данных.Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии.Нет необходимости в строках, нет необходимости в java.sql.* классах.

Где получить классы java.time?

  • Java SE 8 , Java SE 9 , Java SE 10, Java SE 11 и более поздние версии - часть стандартного Java API с связанной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и JavaSE 7
    • Большинство функций java.time перенесены в Java 6 & 7 в ThreeTen-Backport .
  • Android
    • Более поздние версии пакетов Android для реализации java.time классы.
    • Для более ранних версий Android (<26) проект <a href="https://github.com/JakeWharton/ThreeTenABP" rel="nofollow noreferrer"> ThreeTenABP адаптируется ThreeTen-Backport (упомянуто выше).См. Как использовать ThreeTenABP… .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...