Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    181

    [Java] il metodo add di GregorianCalendar aumenta solo il giorno?!

    Vi giuro che mi sono documentato leggendo altri thread del forum e non solo dall'inizio del pomeriggio.
    Il mio obiettivo è aumentare di un giorno la data che arriva da un form. La data arriva gia nel formato dd/mm/yyyy.
    Il codice che ho usato è questo.

    SimpleDateFormat sdf = new SimpleDateFormat("dd/mm/yyyy"); //setto la struttura della data
    GregorianCalendar gc = new GregorianCalendar();//creo un oggetto GregorianCalendar
    try {
    gc.setTime(sdf.parse(al));//conl'operazione di parsing trasformo la stringa al in un oggetto date e la passo in ingresso all'oggetto gc che assumerà il suo valore
    } catch (ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    gc.add(GregorianCalendar.DAY_OF_MONTH, 1);//aggiungo un giorno alla data
    String dataAumentata = sdf.format(gc.getTime()); //trasforma la data in stringa

    il problema è che se setto la data 31/01/2011 lui aumenta solo il giorno! e diventa 01/01 /2011 al posto di 01/02/2011

    leggevo qui: http://forum.html.it/forum/showthrea...=&pagenumber=1

    che in gregoriancalendar i mesi partono da 0 quindi ho provato ad aggiungere gc.add(GregorianCalendar.MONTH, -1); ma non cambia nulla

    NOn riesco davvero a capire dove sbaglio

    inoltre non ho capito la differenza tra i vari tipi di costanti day, dayofmonthe dayofyear...

    illuminatemi vi prego! che sono fuso e disperato!

  2. #2
    Il codice per aggiungere un giorno è giusto. C'è un errore con il parser della data:

    codice:
    SimpleDateFormat sdf = new SimpleDateFormat("dd/mm/yyyy"); //setto la struttura della data
    è "MM" non "mm"

    lolide
    Java Programmer

    Informati

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    181
    codice:
    mm
    
    DATA IN INPUT: 01/01/2011
    DOPO PARSING: Sat Jan 01 00:01:00 CET 2011
    DOPO ADD: Sun Jan 02 00:01:00 CET 2011
    DATA AUMENTATA: 02/01/2011
    
    DATA IN INPUT: 28/02/2011
    DOPO PARSING: Fri Jan 28 00:02:00 CET 2011
    DOPO ADD: Sat Jan 29 00:02:00 CET 2011
    DATA AUMENTATA: 29/02/2011
    
    MM:
    
    DATA IN INPUT: 28/02/2011
    DOPO PARSING: Mon Feb 28 00:00:00 CET 2011
    DOPO ADD: Tue Mar 01 00:00:00 CET 2011
    DATA AUMENTATA: 01/03/2011
    mio Dio! ho perso un pomeriggio per sta caxxata!

    grazie mille! Infatti ora che ricordo il parser dava un exception ed eclipse mi ha suggerito di inserire un blocco try catch!

    In pratica con mm non considera incrementa solo il giorno mentre con MM incrementa anche il mese? Ovviamente incrementa anche il mese solo nel caso in cui la la data in input è l'ultimo giorno di un mese. Ho capito bene?

    Vale la stessa cosa per l'anno? anzi ora provo!

  4. #4
    Originariamente inviato da user0
    In pratica con mm non considera incrementa solo il giorno mentre con MM incrementa anche il mese? Ovviamente incrementa anche il mese solo nel caso in cui la la data in input è l'ultimo giorno di un mese. Ho capito bene?
    No è che se leggi bene la reference di SimpleDateFormat, in particolare nella sezione Date and Time Patterns, troverai che con "mm" lui intende i minuti, quindi parsavi il mese come minuti , e lui settava come mese gennaio di default.

    Infatti se leggi bene qui:

    codice:
    DATA IN INPUT: 28/02/2011
    DOPO PARSING: Fri Jan 28 00:02:00 CET 2011
    DOPO ADD: Sat Jan 29 00:02:00 CET 2011
    DATA AUMENTATA: 29/02/2011
    Hai a 2 i minuti e il mese è gennaio.
    lolide
    Java Programmer

    Informati

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    181
    ah forse ho capito:

    M Month in year Month July; Jul; 07

    m Minute in hour Number 30

    io usavo m che rappresenta i minuti in un'ora.

    Però non capisco perchè il parser continua a darmi errore. QUesto è il codice che sto usando:

    codice:
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); 
    GregorianCalendar gc = new GregorianCalendar();
    gc.setTime(sdf.parse(al)); 
    gc.add(gc.DATE, 1);
    String dataAumentata = sdf.format(gc.getTime());
    Errore:

    org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.Error: Unresolved compilation problem:
    Unhandled exception type ParseException

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    181
    ho notato che eclipse mi da due possibilità, usare un blocco try catch oppure aggiungere un throw, ParseException

    Usando entrambi i metodi non ottengo più l'errore

  7. #7
    Originariamente inviato da user0
    Errore:

    org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.Error: Unresolved compilation problem:
    Unhandled exception type ParseException
    Mi parlavi prima di un blocco try catch che Eclipse ti consigliava di mettere: in realtà è obbligatorio, ma se si tratta di una web-application, il compiler non lo considera errore.

    O usi il try catch, oppure aggiungi throws al metodo.
    lolide
    Java Programmer

    Informati

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    181
    perfetto, grazie ancora

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.