Как я могу посчитать срок годности в Grails, если я знаю, сколько осталось времени?

#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 по восточному времени 2019

5. Integer.MAX_VALUE == 2147483647 , поэтому, если заданное значение больше этого, оно будет сокращено.