Вопрос
Я хочу добавить 1 секунду к дате и времени, чтобы проверить нумерацию страниц на основе даты.Я надеюсь получить дату из нашего ответа API, преобразовать строку даты в дату, затем преобразовать ее в миллисекунды, добавить секунду, а затем преобразовать обратно в строку даты и использовать ее в моем следующем запросе API.(звучит многословно?Такое ощущение, что это так!)
У меня возникает проблема, когда я пытаюсь проанализировать дату и время.Следующий код выдает ошибку:
def c= new date().parse("yyyy-mm-ddThh:mm:ss",lastDate)
log.info "new formatt"+lastDate
log.info c.timeInMillis
Ошибка:groovy.lang.MissingMethodException:Нет подписи метода:java.util.Date.parse() применим для типов аргументов:(java.lang.String, groovy.util.slurpersupport.NodeChildren) значения:[гггг-мм-ддТчч:мм:сс, 2007-01-26T00:00:00] Возможные решения:синтаксический анализ (java.lang.String), синтаксический анализ (java.lang.String, java.lang.String), ожидание(), клонирование(), любой(), использование (java.util.List, groovy.lang.Closure)
Есть какие-нибудь советы о том, как достичь моей цели?Или это тупой подход?
Решение
Вероятно, самое предположить, идиоматическое ценное решение без зависимостей:
Date.parse( "yyyy-MM-dd'T'HH:mm:ss", text ).with { new Date( time + 1000) }
Другие советы
Звучит как довольно окольный способ добавить секунду.Почему бы просто не:
import groovy.time.TimeCategory
def lastDate = new Date()
use(TimeCategory) {
lastDate = lastDate + 1.second
}
Для более гибкого анализа строки даты вы можете взглянуть на Java-библиотеку JChronic.Он может обрабатывать даты во многих различных форматах и не требует наличия точного шаблона, такого как класс SimpleDateFormat.Вот пример использования обоих из них:
Date.metaClass.'static'.fromString = { str ->
com.mdimension.jchronic.Chronic.parse(str).beginCalendar.time
}
def lastDate = Date.fromString("2007-01-26T00:00:00")
use (TimeCategory) {
100.times {
runTest(lastDate)
lastDate = lastDate + 1.second
}
}
Более общее решение Java - использовать Joda Time библиотека.
//
// Dependencies
// ============
import org.joda.time.*
import org.joda.time.format.*
@Grapes([
@Grab(group='joda-time', module='joda-time', version='1.6.2')
])
//
// Main program
// ============
DateTimeFormatter psr = ISODateTimeFormat.dateTimeParser()
DateTimeFormatter fmt = ISODateTimeFormat.dateHourMinuteSecond()
DateTime inDate = psr.parseDateTime("2010-11-18T23:23:59")
println fmt.print(inDate.plusSeconds(1))
Он может справиться с любым форматированием входящей и исходящей даты, включая сложные сценарии с часовыми поясами в строке даты, например, «2010-11-18T23: 23: 59 + 01: 00»
Коллега помог со следующим -
--import groovy.time.TimeCategory)
def aDate = lastDate.toString()
def newdate = Date.parse("yyyy-MM-dd'T'HH:mm:ss",aDate)
use(TimeCategory){
newdate = newdate+1.second
}
У меня было немного сложности, первоначально добавляя время - типы не играют красиво вместе.
Спасибо всем за ваши ответы люди!
Посмотрите здесь:
Вы хотите использовать что-то вроде:
def c = Calendar.instance
c.add(Calendar.SECOND, 1)
Вам нужно инициализировать c
С датой вы хотите, посмотрите на ссылку на разные возможности, но вот пример:
c = new GregorianCalendar(2009, Calendar.JULY, 22, 2, 35, 21)