UCUM UnitFormat for JSR 363

731 views Asked by At

I'm using JSR 363 "Units of Measurement" with the latest reference implementation:

<dependency>
  <groupId>javax.measure</groupId>
  <artifactId>unit-api</artifactId>
  <version>1.0</version>
</dependency>

<dependency>
  <groupId>tec.units</groupId>
  <artifactId>unit-ri</artifactId>
  <version>1.0.2</version>
</dependency>

I want to print out "milliliters" in UCUM format, i.e. "mL":

final UnitFormat unitFormat =
    ServiceProvider.current().getUnitFormatService().getUnitFormat();
final Unit<?> unit = MILLI(LITRE);
final String unitString=unitFormat.format(unit);

Unfortunately this gives me "ml", not "mL" from UCUM. And even though the JSR 363 specification (and source code) teases me throughout with references to the UCUM, UnitFormatService.getAvailableFormatNames() on the RI only gives me "ASCII" and "Default", so I can't use getUnitFormat("UCUM") as the JSR 363 specification hints that I should be able to do (if only someone would support UCUM).

So where can I get a JSR 363 UnitFormat implementation supporting the UCUM?

2

There are 2 answers

0
Gunther Schadow On

In UCUM both l (lower case ell) and L are used for liter. The lower case is continental European style, the upper case is US style. Both are equivalent in UCUM. So it's just a style issue.

0
Werner Keil On

See the JSR 363 extension module https://github.com/unitsofmeasurement/uom-systems/tree/master/ucum-java8 for UCUM support.

It provides support for the Unified Code for Units of Measure on Java SE 8. At the moment UCUM is more powerful and extensive, parsing uses a SymbolMap concept (based on Java ResourceBundles though it is not local-sensitive) so we cannot make it available for the JSR 363 RI. Please use the compatible Java SE 8 port UoM SE if you can.