Для обоснования о временных отношениях (или любых других отношениях интервала, приезжайте в тот), рассмотрите Интервальная алгебра Allen . Это описывает 13 возможных отношений, которые два интервала могут иметь друг относительно друга. Можно найти, что другие ссылки — "Интервал Allen", кажется, действующий критерий поиска. Можно также найти информацию об этих операциях в Snodgrass Разрабатывающие Ориентированные на время Приложения в SQL (PDF доступный онлайн в URL), и на Дате, Дарвене и Lorentzos Временные Данные и Реляционная модель (2002) или Время и Реляционная Теория: Временные Базы данных в Реляционной модели и SQL (2014; эффективно второй выпуск TD& RM).
короткое (выход) ответ: учитывая два интервала даты A
и B
с компонентами .start
и .end
и ограничение .start <= .end
, тогда два интервала накладываются если:
A.end >= B.start AND A.start <= B.end
можно настроить использование >=
по сравнению с >
и <=
по сравнению с [1 110] для соответствия требованиям для степени перекрытия.
комментарии ErikE:
можно только добраться 13 при подсчете вещей забавными... Я могу получить "15 возможных отношений, которые могут иметь два интервала", когда я схожу с ума с ним. Разумным подсчетом я получаю только шесть, и если Вы выводите заботу или A, или B на первом месте, я добираюсь, только три (не пересекаются, частично пересекаются, один полностью в другом). 15 идет как это: [before:before, запустите, в, конец, после], [start:start, в, конец, после], [within:within, конец, после], [end:end, после], [after:after].
я думаю, что Вы не можете считать эти две записи 'before:before' и 'after:after'. Я видел 7 записей, если Вы приравниваете некоторые отношения с их инверсиями (см. схему в URL Википедии, на который ссылаются; это имеет 7 записей, 6 из которых имеют различную инверсию, с, равняется не наличию отличной инверсии). И ли три разумно, зависит от Ваших требований.
----------------------|-------A-------|----------------------
|----B1----|
|----B2----|
|----B3----|
|----------B4----------|
|----------------B5----------------|
|----B6----|
----------------------|-------A-------|----------------------
|------B7-------|
|----------B8-----------|
|----B9----|
|----B10-----|
|--------B11--------|
|----B12----|
|----B13----|
----------------------|-------A-------|----------------------
Метод getXml будет читать из res / xml, а не из res / values, я думаю, что идея заключается в том, что вы используете один из других методов для получения данных, таких как
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyCustomTheme);
и затем извлекаем значения из TypedArray:
thingColor = a.getColor(R.styleale.myCustomColor, res.getColor(R.color.myDefaultColor));
Это работает для styleables, однако моя проблема заключается в том, чтобы в первую очередь использовать атрибуты AttributeSet из XML для использования в качестве переопределений, и позволить людям указать, какой XML-файл они хотите во время выполнения, накачайте его в AttributeSet и передайте его.
Я отправлю ответ, когда у меня будет ответ для второй части, но примеры кода должны решить