Problema calcolo scadenza

di il
2 risposte

Problema calcolo scadenza

Nella tabella c'è una colonna con segnata la scadenza del prodotto. Io prendo la scritta nella colonna a devo stabilire se il prodotto è scaduto, se così la scritta diventa rossa in grassetto
  long diff = new SimpleDateFormat("dd/MM/yyyy").parse((String) getModel().getValueAt(row, colonna_scadenza)).getTime()
                        - oggi.getTime();
           
                if (TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS) <= giorni_scadenza) {
                    comp.setForeground(new CLASSE_ALTRO().rosso_());
                    if (TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS) <= 0) {
                        comp.setFont(new java.awt.Font("Tahoma", 1, comp.getFont().getSize()));

                    }
                }
Oggi l'avevo semplicemente inizializzato così
    Date oggi = new Date();
non funziona mi da in grassetto sia la data di oggi che quella di domani (dovrebbe dare in grassetto solo oggi)
Ho provato anche questo codice...
  Calendar calendar = Calendar.getInstance();

                SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss S");
                System.out.println("Current Time: " + sdf.format(calendar.getTime()));
                calendar.add(Calendar.MILLISECOND, 0);
                Date addMilliSeconds = calendar.getTime();

                long diff = new SimpleDateFormat("dd/MM/yyyy").parse((String) getModel().getValueAt(row, colonna_scadenza)).getTime()
                        - addMilliSeconds.getTime();

                if (TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS) <= giorni_scadenza) {
                    comp.setForeground(new CLASSE_ALTRO().rosso_());
                    if (TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS) <= 0) {
                        comp.setFont(new java.awt.Font("Tahoma", 1, comp.getFont().getSize()));

                    }
                }
L'errore che mi viene dato è sempre lo stesso. O sia oggi che domani sono in grassetto o sia oggi che domani sono non in grassetto, ma sempre rosso... grazie mille !

2 Risposte

  • Re: Problema calcolo scadenza

    p0ll0_ ha scritto:


    Nella tabella c'è una colonna con segnata la scadenza del prodotto. Io prendo la scritta nella colonna a devo stabilire se il prodotto è scaduto, se così la scritta diventa rossa in grassetto

    [...]

    L'errore che mi viene dato è sempre lo stesso. O sia oggi che domani sono in grassetto o sia oggi che domani sono non in grassetto, ma sempre rosso... grazie mille !
    Guarda, te lo dico sinceramente/onestamente: ti stai davvero complicando tantissimo la vita, facendo dei gironi di codice che neanche Dante ci arriverebbe ....

    Innanzitutto, se non ci sono motivi davvero validi, sarebbe meglio abbandonare Date e i (Simple)DateFormat. Principalmente perché questi sono oggetti purtroppo "mutabili", quindi non thread-safe e non facilmente condivisibili (specialmente in ambito multi-threading ma questo è un altro discorso ..).
    Sarebbe invece meglio usare le classi temporali e i formatter in java.time (Java 8+) che sono tutti immutabili, quindi thread-safe e facilmente condivisibili/riusabili.

    Si può mettere un campo static da qualche parte:
    public static final DateTimeFormatter dateFmt = DateTimeFormatter.ofPattern("dd/MM/yyyy", Locale.ITALIAN);
    E riusarlo tutte le volte che si vuole.

    Poi per la scadenza:
    String dataScadenzaStr = .......   // data scadenza del prodotto, es. "03/08/2021"
    
    LocalDate dataScadenza = LocalDate.parse(dataScadenzaStr, dateFmt);
    
    if (dataScadenza.compareTo(LocalDate.now()) < 0) {         // si può anche usare isBefore()
        // è scaduto !
    }
    Basta verificare che la data scadenza sia inferiore alla data "now", quella odierna. Se la data di scadenza è "oggi", generalmente si intende che è un prodotto ancora ok.
    Ed è proprio tutto lì, 3 righe ...
  • Re: Problema calcolo scadenza

    Sono riuscita cmnq. Praticamente credo delle date "False" tipo creo la data di domani e la confronto con la scadenza, poi una data del giorno dopo e ancora ecc... Adesso funziona... Grazie cmnq.
Devi accedere o registrarti per scrivere nel forum
2 risposte