Вы используете ужасные классы даты и времени, которые были вытеснены несколько лет назад современными 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?