Parsing date by date by period in Java 8

I want to replace JodaTime with the Java 8 DateTime API .

I have an ISO-8601 period described = P2W5DT11H8M

In JodaTime I just JodaTime it by running the following code:

Period.parse("P2W5DT11H8M") , and I get a successful Period object.

Can I do the same in Java 8?

+6
source share
2 answers

A Period in Java 8 contains only year / month / day components. A Duration has components hour / minute / second. It seems that you will need to parse the string manually. One of the options may look like the code below (you need to add confirmation of input, etc.) - there may be better alternatives.

 public static void main(String[] args) { System.out.println(PeriodAndDuration.parse("P2W5DT11H8M")); } public static class PeriodAndDuration { private final Period p; private final Duration d; public PeriodAndDuration(Period p, Duration d) { this.p = p; this.d = d; } public Period getPeriod() { return p; } public Duration getDuration() { return d; } public static PeriodAndDuration parse(String input) { int periodStart = input.indexOf("P"); int timeStart = input.indexOf("T"); Period p = Period.parse(input.substring(periodStart, timeStart)); Duration d = Duration.parse("P" + input.substring(timeStart, input.length())); return new PeriodAndDuration(p, d); } @Override public String toString() { return p.toString() + d.toString(); } } 
+5
source

Short answer:

 Period period = Period.parse("P2W5DT11H8M"); 

Long answer: A good description of Oracle on when to use Period or Duration . It comes with some good code samples and should answer any further questions that may arise.

-4
source

All Articles