このサンプルコードを試すと:
use(groovy.time.TimeCategory) {
800.millisecond + 300.millisecond
}
Groovy Webコンソールでは、面白い結果が得られます。
0.1100 seconds
なぜこれが起こるのか、またはそれを修正する方法を知っている人はいますか?
このサンプルコードを試すと:
use(groovy.time.TimeCategory) {
800.millisecond + 300.millisecond
}
Groovy Webコンソールでは、面白い結果が得られます。
0.1100 seconds
なぜこれが起こるのか、またはそれを修正する方法を知っている人はいますか?
これはバグのように見えます。TimeDuration には 1100 ミリ秒が含まれていますが、出力すると、誤って秒に変換されます。
バグ編集 としてGroovy JIRAに追加しましたバージョン2.0.6、1.8.9、および2.1.0では修正済みとしてマークされています
それまでの間、TimeDuration から String への独自のコンバーターを作成する必要があると思います:-/
あなたはこのようなことをすることができます(そしておそらくもっときちんとした方法があります)
groovy.time.TimeDuration.metaClass.normalize = { ->
def newdmap = ['days','hours','minutes','seconds','millis'].collectEntries {
[ (it):delegate."$it" ]
}.with { dmap ->
[millis:1000,seconds:60,minutes:60,hours:24,days:-1].inject( [ dur:[ days:0, hours:0, minutes:0, seconds:0, millis:0 ], roll:0 ] ) { val, field ->
val.dur."$field.key" = dmap."$field.key" + val.roll
val.roll = val.dur."$field.key".intdiv( field.value )
val.dur."$field.key" = field.value < 0 ?
val.dur."$field.key" :
val.dur."$field.key" % field.value
val
}.dur
}
new TimeDuration( newdmap.days, newdmap.hours, newdmap.minutes, newdmap.seconds, newdmap.millis )
}
normalize
にメソッドを追加するTimeDuration
ので、次のようにします。
use(groovy.time.TimeCategory) {
800.millisecond + 300.millisecond
}.normalize()
ショー1.100 seconds
私はその方法で大量のテストを行っていないので、他の状況で失敗しないことを確認するために、いくつかの単体テストで行うことができることに注意してください.