Сравнение двух дат в формате String - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь сравнить две даты в целых числах (например, 10-05-2018).Формат этих двух дней одинаков, и предпочтительное решение не имеет типа Date.Мои идеи заключались в том, чтобы написать даты задом наперед и сравнить их как целые числа, что не работает как найденный контрпример: 10,09,2018 и 09,09,2018.Есть еще идеи?Спасибо!

for (int i=0; i<date.length(); i++) {
    date3 = date.charAt(i) + datum1;
    date4 = date2.charAt(i) + date2;

}

if (datum3.compareTo(datum4)>0) {
    return 1;
}
if ((datum3.compareTo(datum4)<0)) {
    return -1;

}
    return 0;
}

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Я предполагаю, что вы не хотите использовать java.util.Date или его замену java.time.LocalDate , вероятно, потому что это назначение.

Сравнение этих чисел можно сделатьпутем преобразования каждого компонента в int и последующего использования Integer.compare для каждого компонента из года в день:

В псевдокоде это будет означать:

For each component in [Year, Month, Day]:
  n = compare(date1[component], date2[component])
  if n != 0 then 
    return n
return 0 // all component are equals.

несколько способов обработки, чтобы получить компоненты в массив int, где Year = 0, Month = 1 и Day = 2 представляют индекс каждого компонента в указанном массиве.

Вы можете преобразовать весь String в массив int[].Если вы знаете формат, использование Pattern (см. Примечание) (например, Pattern.compile("^(?<DAY>\d+)-(?<MONTH>\d+-(?<YEAR>\d+)$")), вероятно, является самым простым для проверки String, следуя некоторому заданному формату.Он также позволяет извлекать компонент (используя matcher.group("DAY") и т. Д.).

Сравнение String как числа можно выполнить двумя способами:

  • Получайте удовольствиес цифрами.
  • Используйте Integer.parseInt(String).

Поскольку вам, вероятно, следует проверять диапазон компонентов (каждый месяц от 1 до 12, дни от 1 до 31 [или в зависимости отmonth], ...), преобразование в int будет самым простым.

Примечание: для назначения, не использующего java.util.Date, но допускающего Pattern, вероятно, будет контрпродуктивным.

0 голосов
/ 29 декабря 2018

Мы используем целые числа в формате ггггммдд

Мы можем использовать обычный тип int, сортировать работает, использует меньше места, чем Date, для чтения

Но чего не хватает, так это арифметических операций с датой, которые потребуютпреобразования

Также рассмотрите LocalDate ... более новый тип данных Java от Joda

...