2016-04-06 9 views
1

Ich muss einen Zeitintervallausdruck analysieren, der der ISO 8601-Syntax ähnelt und nur Platzhalter für Felder zulässt; und Speichern des Anfangs und des Endes in zwei LocalDateTime Objekte. Mein Interval würde dann APIs haben, um mit einem dritten LocalDateTime oder OffsetDateTime zu vergleichen, um zu überprüfen, ob es innerhalb oder außerhalb des Intervalls fällt.Java 8 ISO 8601 Intervallsyntax mit Platzhalterfeld (en)

Zum Beispiel: Beim Analysieren von "****-**-**T00:00:00Z/****-**-**T11:55:00Z" sollte das Datum des Start- und Endzeitpunkts der Tag der Startprogrammausführung sein (Ignorieren des Laufens in das Problem des nächsten Tages). Wie kann ich einen solchen Ausdruck analysieren?

EDIT: um es klar zu machen, wenn ich es heute ausführen, sollte es gleichbedeutend mit Parsing "2016-04-06T00:00:00Z/2016-04-06T11:55:00Z" sein.

+0

Unklare. Ist der String tatsächlich "**** - ** - ** T00: 00: 00Z/**** - ** - ** T11: 55: 00Z" '? Wie wollen Sie das Ergebnis haben? – Tunaki

+0

@Tunaki, ich dachte das Beispiel war klar, fügte aber jetzt mehr Details hinzu. – derrdji

+0

Okay, aber was ist das gewünschte Ergebnis? Um diese zwei Datetime in zwei 'LocalDateTime' zu ​​speichern? Berechnen Sie den Zeitraum zwischen diesen beiden Daten? – Tunaki

Antwort

0

Ich glaube nicht, dass es einen Weg gibt to use wildcards when parsing a string with java.time. Ein nicht so gut aussehender Hack wäre es, die * durch 1 zu ersetzen: das sollte kein unüberprüfbares Datum erzeugen. Sie können dann den Datumsinhalt ignorieren.

Zum Beispiel:

String input = "****-**-01T00:00:00Z/****-04-**T11:55:00Z"; 
String[] dates = input.replace("*", "1").split("/"); 
ZonedDateTime zdt1 = ZonedDateTime.parse(dates[0]); 
ZonedDateTime zdt2 = ZonedDateTime.parse(dates[1]); 

LocalDate day = LocalDate.now(); //or whatever date you like 

LocalDateTime start = zdt1.toLocalTime().atDate(day); 
LocalDateTime end = zdt2.toLocalTime().atDate(day); 

System.out.println(start + "/" + end);