Я хочу вставить дату истечения срока действия в Redis на основе TTL. Как я могу считать срок годности?
Я пытаюсь использовать класс TimeCategory
, вот пример:
def ttl = 3600;
def date = new Date()
TimeDuration duration = getSeconds(ttl)
TimeDuration expiryDate = date.plus.duration
Это правильный подход к подсчету срока годности?
Слишком сложно, если вы спросите меня.
Здесь должно быть достаточно одного лайнера:
Date expiryDate = new Date( System.currentTimeMillis() + ttlInSeconds * 1000l )
Убедитесь, что вы используете здесь числа long
, иначе числа будут сокращены до 2147483647
, что может привести к неправильным результатам для больших TTL.
никакого дополнительного импорта не требуется, все просто java.util
будет ли это решение работать с секундами? потому что ttl
- это количество секунд, и я мог видеть, что вы использовали метод currentTimeMillis()
он считает, но показывает неправильные данные, например. если ttl = 13140000
(5 месяцев), срок годности показывает: Пн 08 апр 11:07:37 EEST 2019
это потому, что вы используете int
по умолчанию вместо long
. тогда это даст вам Wed Sep 04 11:19:26 GMT 2019
. Посмотреть обновление
Все работает! Большое спасибо! Объясните, пожалуйста, почему это не работало с int
, но работало с long
- количество чисел превышает int
длину?
Integer.MAX_VALUE
== 2147483647
, поэтому, если указанное значение больше этого, оно будет сокращено.
я должен импортировать отличное время:
import groovy.time.*
?