Задать вопрос
@KUBud

В Java массив дат без года (день и месяц только) и сравнение даты с датами в массиве?

Как сделать массив дат без года (день и месяц только) и потом сравнить дату, введенную пользователем с одной из дат в массиве?

java.time
util.data

пишу, но до конца применение понять не могу.
Может есть проще способ?
  • Вопрос задан
  • 287 просмотров
Подписаться 1 Простой 5 комментариев
Пригласить эксперта
Ответы на вопрос 2
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Извиняюсь, было лень java запускать, вызвал из REPL clojure, используя явовские классы
(def sdf (java.text.SimpleDateFormat. "yyyy-MM")

(.format sdf (java.util.Date.))
;; => "2023-04"
(.parse sdf "2022-01")
;; => #inst "2021-12-31T21:00:00.000-00:00"


Это примерно вот это на яве
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
Date dn = new Date();
System.out.println(sdf.format(dn));
Date dp = sdf.parse("2022-01");
System.out.println(dp);


Ну и фильтрануть по по массиву строк с датами
;;  собственно сам массив со строками дат
(def dates 
  (map
   (fn [i] (str "2022-" i))
   (range 1 10)))
;; dates
;; => ("2022-1"
;;     "2022-2"
;;     "2022-3"
;;     "2022-4"
;;     "2022-5"
;;     "2022-6"
;;     "2022-7"
;;     "2022-8"
;;     "2022-9")

;; Функция фильтрации, в яве можно использовать Stream API
(defn filter-dates [dates chk]
  (filter
   (fn [x] 
     (some (partial = x) chk)) dates)
  )

;;  фильтруем :)
(filter-dates dates ["2022-1" "2022-9" "2023-1"] )
;; => ("2022-1" "2022-9")
Ответ написан
Комментировать
@My1Name
Самый простой способ сравнивать даты как строки, используя метод compareTo
Если у вас имеется массив LinkedList<String> listDates в виде строковых чисел, например: 01.01.2023 или 01-01-2023 и т.п., то его можно отсортировать или найти нужную дату следующим образом:
String tmp;
		for(int i = listDates.size()-1; i >=0 ; i--){
	        for(int j = 0; j < i; j++){
	            if(listDates.get(j).compareTo(listDates.get(j+1))>0){ 
	            	tmp = listDates.get(j);
	            	listDates.set(j, listDates.get(j+1));
	            	listDates.set(j+1, tmp);
	            }
	        }
	    }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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