2016-04-06 1 views
1

Мне нужно разобрать выражение временного интервала, аналогичное синтаксису ISO 8601, только разрешая подстановочные знаки для полей; и сохранение начала и конца на два объекта LocalDateTime. Мой Interval имел бы API-интерфейсы для сравнения с третьим LocalDateTime или OffsetDateTime, чтобы проверить, не попадает ли он внутри или вне интервала.Java 8 ISO 8601 Синтаксис интервала с подстановочными полями

Например: при разборе "****-**-**T00:00:00Z/****-**-**T11:55:00Z", дата начала и конца момента должна быть днем ​​запуска программы (игнорируя выполнение проблемы на следующий день). Как я могу разобрать такое выражение?

EDIT: чтобы было ясно, если я запустил его сегодня, это должно быть эквивалентно разбору "2016-04-06T00:00:00Z/2016-04-06T11:55:00Z".

+0

мутноватый. Является ли строка фактически '' **** - ** - ** T00: 00: 00Z/**** - ** - ** T11: 55: 00Z "?? Чего вы хотите, чтобы результат был? – Tunaki

+0

@ Тунаки, я думал, что этот пример был ясен, но добавил больше подробностей. – derrdji

+0

Хорошо, но какой результат вы хотите? Чтобы сохранить эти два datetime в два 'LocalDateTime'? Рассчитать период между этими двумя датами? – Tunaki

ответ

0

Я не думаю, что есть способ to use wildcards when parsing a string with java.time. Не очень привлекательным взломам было бы заменить * на 1: это не должно давать никакой неподдельной даты. Затем вы можете игнорировать содержимое даты.

Например:

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); 
Смежные вопросы