Some basic unit conversion operation. It Assumes that default units are milliseconds for durations, and bytes for data size.
In your build.sbt, add this :
libraryDependencies += "fr.janalyse" %% "unittools" % version
Examples coming from the test cases :
  test("duration rewritten") {
    "1".toDuration.toDurationDesc should equal("1ms")
    "7d".toDuration.toDurationDesc should equal("1w")
    "60m".toDuration.toDurationDesc should equal("1h")
    "3600s".toDuration.toDurationDesc should equal("1h")
    "3600000ms".toDuration.toDurationDesc should equal("1h")
  }
  
  test("size basics") {
    0.toSizeDesc should equal("0b")
    1.toSizeDesc should equal("1b")
    "1mb".toSize should equal(pow(1024L,2))
    "10mb25kb".toSize should equal(10*pow(1024L,2)+25*1024L)
  }
  test("classes parameter usage") {
    import fr.janalyse.unittools._
    case class ExampleClass(howlong:DurationHelper, amount:SizeHelper)
    val example = ExampleClass(howlong="5h30m", amount="10mb")
    val howlong:Long = example.howlong
    val amount:Long  = example.amount
  }
  
  test("basics") {
    (5 m).value should equal (60L*1000*5)
    (3 h).value should equal (3600L*1000*3)
    (1.m + 1.s).value should equal (61L*1000)
    (1.h + 10.m + 10.s).value should equal (3600L*1000+600*1000+10*1000)
  }