#grails #groovy #time #duration #content-expiration
#grails #groovy #время #Продолжительность #содержимое-истечение
Вопрос:
Я хочу вставить дату истечения срока действия в Redis на основе TTL. Как я могу посчитать дату истечения срока действия?
Я пытаюсь использовать TimeCategory
класс, вот пример:
def ttl = 3600;
def date = new Date()
TimeDuration duration = getSeconds(ttl)
TimeDuration expiryDate = date.plus.duration
Это правильный подход к подсчету даты истечения срока действия?
Ответ №1:
Слишком сложно, если вы спросите меня.
Здесь должно быть достаточно однострочного:
Date expiryDate = new Date( System.currentTimeMillis() ttlInSeconds * 1000l )
Убедитесь, что вы используете здесь long
числа, иначе числа будут сокращены до 2147483647
, что может привести к неправильным результатам для больших TTL.
Комментарии:
1. должен ли я импортировать groovy time:
import groovy.time.*
?2. никаких дополнительных импортов не требуется, это просто
java.util
3. будет ли это решение также работать с секундами? причина
ttl
— это количество секунд, и я мог видеть, что вы использовалиcurrentTimeMillis()
метод4. он подсчитывает, но показывает неправильные данные, например. если
ttl = 13140000
(5 месяцев), дата истечения срока действия показывает: Пн Апр 08 11:07:37 по восточному времени 20195.
Integer.MAX_VALUE
==2147483647
, поэтому, если заданное значение больше этого, оно будет сокращено.