Вопрос

Я хочу добавить 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)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top