サイズに応じて異なるフォーマット仕様でミリ秒単位の期間を出力したいと思います。
case (1) "H:mm" if duration < 10 hours
case (2) "HH:mm" if duration < 24 hours
case (3) "#d HH:mm" else (duration >= 24 hours)
つまり、期間が 10 時間未満の場合は 1 時間フィールド桁のみです
が、先頭に日フィールドがある場合は 2 時間フィールド桁です!
例:
case (1) "0:45" means 45 minutes,
"1:23" means 1 hour and 23 minutes,
case (2) "12:05" means 12 hours and 5 minutes and
case (3) "1d 05:09" means 1 day, 5 hours and 9 minutes
(= 29 hours and 9 minutes).
私は試してみました
object JodaTest {
import org.joda.time._
private val pdf = {
import format._
val pfb = new PeriodFormatterBuilder()
.appendDays.appendSeparator("d ")
.printZeroAlways
.minimumPrintedDigits(2).appendHours.appendSeparator(":")
.appendMinutes
new PeriodFormatter(pfb.toPrinter, null)
}
def durstr(duration: Long): String =
pdf.print((new Period(duration)).normalizedStandard)
}
につながる
2700000 => "00:45" but should be "0:45"
4980000 => "01:23" but should be "1:23"
43500000 => "12:05"
104940000 => "1d 05:09"
しかし、(1)の場合に2桁の日表現の先頭のゼロを省略する方法がわかりませんが、同時に(3)の場合に同じPeriodFormatで強制的に印刷する方法がわかりません。
単一でそれを行うことは可能org.joda.time.format.PeriodFormatter
ですか?