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

    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")
    Ответ написан
    Комментировать
  • В Java массив дат без года (день и месяц только) и сравнение даты с датами в массиве?

    @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);
    	            }
    	        }
    	    }
    Ответ написан
    Комментировать