Поиск разницы между датами

472
03 июня 2017, 15:13

Должен написать многопоточную программу. Один из этапов разработки - поиск разницы во времени (разница может быть в годах, в месяцах или днях, в зав-ти от входных данных. Разница расчитывается с датой в прошлом и текущим временем).

Пробовал разные варианты, в виду недостатка опыта никак не могу подобрать решение, не знаю что использовать: LocalDate, Date, Calendar или иные варианты. На данный момент использую LocalDate, но путь как мне кажется не верен (не могу сравнить год и месяц).

Вопрос таков - какой тип данных я должен использовать для сохранения момента в прошлом (год, месяц, день) для последующего успешного сравнения (желательно путем обычного вычитания аля resultYear = firstYear - secondYear)?

package myDefaultPackage;
import java.time.*;
public class Timer extends Thread {
    public static final LocalDate DATE_OF_SESSION = LocalDate.of(2012, Month.DECEMBER, 12);
    public static LocalDate differenceOfTheTime;
    public void run() {
        LocalDate now;
        while (!Thread.currentThread().isInterrupted()) {
            try {
                sleep(500);
                now = LocalDate.now(); // получение текущей даты
            }
            catch (InterruptedException e) {
            }
        }
    }
    /*
     * Сравниваем два объекта LocalDate, возвращаем их разницу в виде 
     * объекта LocalDate*/
    LocalDate compare(LocalDate dateOfSession, LocalDate compared) {
        LocalDate resultYear = dateOfSession - compared;
    }    
}

3 снизу cтрочка кода, где производится вычитание, выдает ошибку

The operator - is undefined for the argument type(s) java.time.LocalDate, java.time.LocalDate.

Что посоветуете использовать вместо LocalDate или как сравнить LocalDate (год и месяц)?

Answer 1
LocalDate last = LocalDate.of(2017, 6, 2);
LocalDate first = LocalDate.of(2005, 10, 8);
LocalDate resultDate = compare(last, first); //returns 0011-08-25
LocalDate compare(LocalDate dateOfSession, LocalDate compared)
{
    long resultDays = ChronoUnit.DAYS.between(compared, dateOfSession);
    return LocalDate.of(0, 1, 1).plusDays(resultDays - 1);
}

Чтобы узнать разницу только в годах можно использовать методы

  • ChronoUnit.YEARS.between(first, last); //returns 11
  • Period.between(first, last).getYears();
READ ALSO
Подскажите, как реализовать поиск по sub item [требует правки]

Подскажите, как реализовать поиск по sub item [требует правки]

По основному все вышло прекрасно с помощью getFilter, а вот как проделать то же с sub items понять не могу

257
Сравнение строк не происходит [дубликат]

Сравнение строк не происходит [дубликат]

На данный вопрос уже ответили:

289
Как выровнять символы в строке?

Как выровнять символы в строке?

Есть массив строкНужно чтобы каждая строка начиналась с одного из наборов:

338
Как узнать, какие порты нужно пробросить при использовании Java ServerSocket?

Как узнать, какие порты нужно пробросить при использовании Java ServerSocket?

Приветствую всех! У меня следующая проблема: есть сервер на Java, использующий для работы ServerSocket , к которому подключаются несколько клиентовВ...

898