I am trying to parse durationString= P10YT10M using java.time.Duration.parse() method but its failing with "Text cannot be parsed to a Duration "
try {
String durationString = "P5YT30M";
Duration duration = Duration.parse(durationString);
} catch ( Exception e) {
System.err.println( e.getMessage());
Its working for durationStrings like PT5M, but not able to parse durationStrings Similar to P5YT30M, P5Y8M4W3D
java.time.Duration.parse()
does not support ISO-8601 duration strings that include years (Y) or months (M).
This is because Duration
only supports time-based durations, not calendar-based durations. There is ambiguity in calendar-based durations e.g. years or months have different lengths, so it is not precise to use them for durations.
According to the docs, parse
method:
Obtains a
Duration
from a text string such asPnDTnHnMn.nS
.
If you want to parse something like "P5Y8M4W3D"
, you should use java.time.Period.
Period
represents years, months, days - calendar-based units.