9

日付ベースのページネーションをテストできるように、datetime に 1 秒を追加しようとしています。API 応答から日付を取得し、日付文字列を日付に変換し、それをミリ秒に変換し、1 秒を追加してから日付文字列に戻して、次の API 要求で使用することを望んでいます。(くどいようですが、そんな感じです!)

dateTime を解析しようとすると問題が発生します。次のコードはエラーをスローしています。

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) 値: [yyyy-mm- ddThh:mm:ss, 2007-01-26T00:00:00] 考えられる解決策: parse(java.lang.String)、parse(java.lang.String、java.lang.String)、wait()、clone() , any(), use(java.util.List, groovy.lang.Closure)

私の目標を達成するためのヒントはありますか?それとも薄暗いアプローチですか?

4

5 に答える 5

15

秒を追加する方法についてはかなりラウンドのように聞こえます。それだけではない理由:

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
    }
}
于 2010-11-17T04:30:10.817 に答える
12

おそらく、依存関係のない最も簡潔で慣用的な groovy ソリューション:

Date.parse( "yyyy-MM-dd'T'HH:mm:ss", text ).with { new Date( time + 1000) }
于 2010-12-02T01:19:45.283 に答える
2

より一般的な 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」など、日付文字列にタイムゾーンを含む複雑なシナリオを含む、受信および送信の日付フォーマットを処理できます。

于 2010-11-18T23:35:46.073 に答える
1

同僚が次のことを手伝ってくれました -

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

最初に時間を追加するのに少し苦労しました - タイプがうまく連携していませんでした.

ご回答いただきありがとうございます。

于 2010-11-19T02:54:19.940 に答える
0

ここを見てください:

次のようなものを使用したい:

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

必要なc日付で初期化する必要があります。さまざまな可能性についてのリンクを参照してください。ただし、例を次に示します。

c = new GregorianCalendar(2009, Calendar.JULY, 22, 2, 35, 21)
于 2010-11-17T03:03:05.083 に答える