Как получить количество дней в пересечении 2х периодов?

Существует несколько вариантов перемещения папок. Наиболее подходящий для использования зависит от обстоятельств.

Конфигурация приложения

Изменение настроек конфигурации из приложения обычно предпочтительнее, если такая настройка существует.

Для Google Chrome есть параметр командной строки, который можно использовать:

google-chrome --disk-cache-dir="/tmp/chromium"

Это изменение можно сделать полу -perantent путем изменения файлов *.desktop, но сделать это громоздко и, вероятно, сломается. Поэтому может быть предпочтительнее более общий метод.

символические ссылки

Это тот подход, который вы упомянули в своем вопросе. Это самый простой способ, и я попытался бы сначала попытаться описать ситуацию. Скопируйте или создайте новую папку в нужном месте и используйте команду ln -s:

ln -s [new-location] [old-location]

Это единственный тип ссылки, который будет работать с папками. Жесткие ссылки (созданные с помощью ln без опции -s) работают только с файлами.

Остерегайтесь, ссылки могут быть повреждены, если перемещена целевая папка или сама ссылка.

9] bind mount

Крепление привязки можно рассматривать как установку папки вместо раздела. Я бы использовал этот подход, если бы хотел, чтобы несколько точек монтирования разделяли раздел, но не хотели использовать символические ссылки. Например, если программа неверно работает при встрече с символическими ссылками.

Что такое привязка?

выделенный раздел (или диск)

Обычно для предотвращения заполнения раздела / используется отдельный раздел /home. Также принято помещать /var в свой собственный раздел. Вы можете прочитать больше здесь:

Что такое привязка?

Этот подход лучше всего применять во время новой установки операционной системы. Изменение структуры разделов уже запущенной системы является громоздким.

1
задан 31 May 2018 в 09:08

2 ответа

В java есть класс java.time.Period для хранения информации и временных промежуток. Он имеет следующий конструктор Period.between(LocalDate start, LocalDate end). В данной ситуации нужно только правильно определить дату начала и конца из четырех аспектов дат. Напишем метод, который это делает:

private static Period getPeriod(LocalDate s1, LocalDate f1, 
                                LocalDate s2, LocalDate f2) {
    //наиболее поздняя дата в качестве начала общего промежутка
    LocalDate start = s1.isAfter(s2) ? s1 : s2;
    //наиболее ранняя дата в качестве конечной даты
    LocalDate end = f1.isBefore(f2) ? f1 : f2;
    //ситуация когда пересечения у двух промежутков нет
    if ((start == s1 && end == f1) || (start == s2 && end == f2))
        return Period.ZERO;
    else
        return Period.between(start, end);
}

Использовать его можно следующим образом:

LocalDate s1 = LocalDate.of(2016, 12, 1);
LocalDate f1 = LocalDate.of(2016, 12, 5);

LocalDate s2 = LocalDate.of(2016, 12, 3);
LocalDate f2 = LocalDate.of(2016, 12, 10);

System.out.println(getPeriod(s1, f1, s2, f2).getDays());

Вывод:

2
5
ответ дан 6 June 2018 в 11:58

как диапазон берет максимальную дату из двух дат начала (в вашем примере 5 мая) и минимальную из двух дат окончания (в вашем примере 15 мая).

Вычитаете - используйте количество дней, которые пересекаются в первом и втором уровнях

PS: Если нужен пример на Java как посчитать разницу между двумя Date, вот есть неплохое описание [ ! d2]

2
ответ дан 6 June 2018 в 11:58

Другие вопросы по тегам:

Похожие вопросы: