Quick tip: ISO 8601 durations in Java
Many developers know about the interchange formats for dates and times defined by ISO 8601. (For example 2007-08-31T16:47+00:00 which represents 16:47 on August 31, 2007 in UTC)
However, what is not so well-known (at least in my experience), is that this standard also defines a format for durations.
Here are a few examples:
- P1Y – 1 year
- P2M4D – 2 months and 4 days
- P3Y6M4DT12H30M5S – 3 years, 7 months, 4 days, 12 hours, 30 minutes, and 5 seconds
In Java it is quite easy to work with this format because the java.time API can automatically parse it to Duration and Period objects.
Duration is used to work with hours and smaller time units while Period works with dates.
For example:
1 2 | Duration duration = Duration.parse( "PT12H" ); // 12 hours Period period = Period.parse( "P3Y6M" ); // 3 years and 6 months |
We can now work with these instances, for example we can add period to a LocalDate:
1 | LocalDate result = LocalDate.of( 2020 , 8 , 1 ).plus(period); // 2024-02-01 |
Published on Java Code Geeks with permission by Michael Scharhag, partner at our JCG program. See the original article here: Quick tip: ISO 8601 durations in Java Opinions expressed by Java Code Geeks contributors are their own. |