Provides classes representing physical quantities. The Units class defines an enumeration of physical units such as Units.hertz and Units.microseconds. It also contains a convention for identifying locations in time with units like Units.t1970, the number of microseconds elapsed since midnight, January 1, 1970. The Units class also contains a registry of Units and the conversions between them.

A Datum is a number in the context of a Unit, for example "15 microseconds." A Datum object has methods for formatting itself as a String, representing itself as a double in the context of another Unit, and mathematical operators that allow simple calculations to be made at the physical quantities. Also, a Datum's precision can be limited to improve formatting.

A DatumRange is a pair of Datums that identify a range in the physical space of a Unit. An example of a formatted DatumRange is "January, 2005" or "0 to 50Hz".

Time ranges are a special case of DatumRange that are used often. These include "March 2010", "2012-12-14T00:00/2012-12-14T01:00", and "2012-12-14T00:00:00.001/2012-12-14T00:00:00.002". Note that DatumRanges provide a next() and previous() method, so "April 2010" would be the result of next called on the datum range for "March 2010". There are also special cases of time ranges like orbit ranges. These are formatted like "orbit:rbspa-pp:5" is the time interval for orbit 5 of the RBSP-A (Van Allen) probe.

Also there are utility classes for parsing and formatting times. DatumRangeUtil.parseDatumRange or DatumRangeUtil.parseTimeRange can be used to parse strings into DatumRanges. See Datum.createValid and Units.parse which parse strings into Datums.