Controllare che una certa data rientri negli ultimi 10 giorni

di Anonimizzato27339 il
19 risposte
Controllare che una certa data rientri negli ultimi 10 giorni. Come si fa con Java?
La data che ricevo è tipo così: 2019-11-01 e devo controllare che questa data rientri negli ultimi 10 gg. Grazie.

19 Risposte

  • p0laster ha scritto:


    Controllare che una certa data rientri negli ultimi 10 giorni. Come si fa con Java?
    La data che ricevo è tipo così: 2019-11-01 e devo controllare che questa data rientri negli ultimi 10 gg. Grazie.
    Precisa prima quale classe/API intendi usare: java.util.Date? java.util.Calendar? La nuova Date/Time API da Java 8? La Joda-Time (predecessore della Date/Time API)?
  • Come faccio a saperlo? Io la data la prendo usando Jsoup... Da un certo sito prendo la data di un certo post...
  • Sai splittare le stringhe e contare quanti millisecondi ci sono in 10 giorni? Allora fatti un new Date(2019,11,1) e vedi quanti millisecondi è indietro rispetto a now() tramite getTime()
  • p0laster ha scritto:


    Come faccio a saperlo? Io la data la prendo usando Jsoup...
    Con Jsoup estrai parti di html dalla pagina, quindi hai delle stringhe. Pertanto se parti da una data in stringa devi prima fare un parsing. E lo puoi fare sia nel modo classico con DateFormat/Date, sia con la Date/Time API da Java 8.

    Mostra un esempio di data in stringa ... per capire il formato.
  • Forse non ho capito io, oppure è sfuggito a te, ho scritto sopra "2019-11-01" questo esempio di data che estraggo... e devo vedere se rientra negli ultimi 10 giorni
  • p0laster ha scritto:


    Forse non ho capito io, oppure è sfuggito a te, ho scritto sopra "2019-11-01" questo esempio di data che estraggo... e devo vedere se rientra negli ultimi 10 giorni
    Bene, allora la soluzione ti è stata detta. A te il codice
  • Attendo quindi una risposta Grazie mille.
  • "A te il codice" significa che si attende da te una proposta ...
  • Ho fatto System.out.println(Calendar.getInstance());


    E mi da questo
    java.util.GregorianCalendar[time=1574598608934,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Europe/Berlin",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=143,lastRule=java.util.SimpleTimeZone[id=Europe/Berlin,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]],firstDayOfWeek=2,minimalDaysInFirstWeek=4,ERA=1,YEAR=2019,MONTH=10,WEEK_OF_YEAR=47,WEEK_OF_MONTH=3,DAY_OF_MONTH=24,DAY_OF_YEAR=328,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=1,HOUR_OF_DAY=13,MINUTE=30,SECOND=8,MILLISECOND=934,ZONE_OFFSET=3600000,DST_OFFSET=0]


    Ho sottolineato in neretto l'anno che è giusto, il giorno del mese che è giusto, l'ora che è giusta. Non capisco perchè nel mese segna 10 al posto che 11... dato che siamo a Novembre...
  • Perché Gennaio vale 0
  • p0laster ha scritto:


    Ho fatto System.out.println(Calendar.getInstance());
    Hai solo una data, quindi Calendar è meno utile/appropriato.
    La data che hai dato di esempio es. "2019-11-01" è già nel formato ISO Local Date, quindi puoi usare LocalDate e in generale la nuova Date/Time API:

    1) LocalDate.parse(" ...... ") ed ottieni un LocalDate
    2) Prendi il LocalDate "corrente": LocalDate.now()
    3) Dal "now" togli 10 giorni: minusDays(10) ed ottieni un ulteriore LocalDate
    4) Verifichi con compareTo() se il LocalDate parsato è compreso tra il LocalDate (-10gg) e il LocalDate (now).
  • Ce l'ho fatta (credo)
        public static boolean recente_(String time) {
            try {
                SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd");
                String data = Calendar.getInstance().get(Calendar.YEAR) + "-";
    
                data += (Calendar.getInstance().get(Calendar.MONTH) + 1) + "-";
                data += Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
    
                long diff = myFormat.parse(data).getTime() - myFormat.parse(time).getTime();
                System.out.println(diff);
                if (diff <= 864000000) {//10 giorni
                    System.out.println(time);
                    return true;
                }
    
            } catch (Exception e) {
                System.err.println("    qualcosa non va nel calcolo del tempo");
            }
            return false;
        }
  • p0laster ha scritto:


    Ce l'ho fatta (credo)
    Perché devi fare tutti 'sti giri quando bastano 4 (quattro) righe di codice con LocalDate ??
  • andbin ha scritto:


    p0laster ha scritto:


    Ce l'ho fatta (credo)
    Perché devi fare tutti 'sti giri quando bastano 4 (quattro) righe di codice con LocalDate ??
    Ok, allora come si fa con LocalDate?
Devi accedere o registrarti per scrivere nel forum
19 risposte