Дата время в Groovy - PullRequest
       8

Дата время в Groovy

8 голосов
/ 17 ноября 2010

Я хочу добавить 1 секунду к дате и времени, чтобы я мог проверить нумерацию на основе даты. Я надеюсь получить дату из нашего ответа API, преобразовать строку даты в дату, затем преобразовать ее в миллисекунды, добавить секунду, а затем преобразовать обратно в строку даты и использовать ее в моем следующем запросе API. (звучит длинновато? Это точно так!)

У меня возникает проблема, когда я пытаюсь разобрать dateTime. Следующий код выдает ошибку:

def c= new date().parse("yyyy-mm-ddThh:mm:ss",lastDate)
log.info "new formatt"+lastDate
log.info c.timeInMillis

Ошибка: groovy.lang. mm: ss, 2007-01-26T00: 00: 00] Возможные решения: parse (java.lang.String), parse (java.lang.String, java.lang.String), wait (), clone (), any (), использовать (java.util.List, groovy.lang.Closure)

Какие-нибудь советы о том, как достичь моей цели? Или это тупой подход?

Ответы [ 5 ]

14 голосов
/ 17 ноября 2010

Звучит как способ округлить добавление секунды.Почему бы просто:

import groovy.time.TimeCategory

def lastDate = new Date()

use(TimeCategory) {
    lastDate = lastDate + 1.second
}

Для более гибкого разбора строки даты, вы можете обратиться к библиотеке JChronic java.Он может обрабатывать даты во многих различных форматах и ​​не зависит от наличия точного шаблона, такого как класс 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
    }
}
9 голосов
/ 02 декабря 2010

Пожалуй, самое лаконичное, идиоматичное решение без зависимостей:

Date.parse( "yyyy-MM-dd'T'HH:mm:ss", text ).with { new Date( time + 1000) }
2 голосов
/ 19 ноября 2010

Более общим решением 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»

1 голос
/ 19 ноября 2010

Коллега помог со следующим -

--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
}

Сначала у меня возникли некоторые трудности с добавлением времени - типы не играли хорошо вместе.

Спасибо всем за ваши ответы, ребята!

0 голосов
/ 17 ноября 2010

Взгляните сюда:

Вы хотите использовать что-то вроде:

def c = Calendar.instance
c.add(Calendar.SECOND, 1)

Вам нужно инициализировать c желаемой датой, посмотрите ссылку на различные возможности, но вот пример:

c = new GregorianCalendar(2009, Calendar.JULY, 22, 2, 35, 21)
...