Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    86

    Pagina di ricerca

    Ciao a tutti..sono nuovo e spero che mi perdonerete
    se non sono molto breve..
    Ho un quesito
    In una classe di utility i metodi per controllare la data di una
    pagina di ricerca (ricerca.jsp) sono scritti qui di seguito(Per brevità ho tralasciato i metodi per il controllo dell'ora)

    Nell'espressione:
    if(data.after(dataCorrente))
    ritorno = false;
    in che formato deve essere "data"?
    Ho bisogno chiaramente che la variabile contenga tanto la data quanto l'ora, ma non so come scrivere l'espressione partendo da una stringa che rappresenta la data e un'altra stringa che rappresenta l'ora

    import java.sql.Date;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;


    public static String dataFormatoDate(String dataString) {
    String dd = dataString.substring(0,2);
    String mm = dataString.substring(3,5);
    String yy = dataString.substring(6);
    String dataNew = yy+"-"+mm+"-"+dd;
    return dataNew;
    }

    public static boolean dataFormatoValido(String dataString) {
    boolean valido = true;
    String dataNew = dataFormatoDate(dataString);
    if(dataNew.equals(""))
    return true;
    try{
    java.sql.Date data = null;
    data = Date.valueOf(dataNew);
    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    sdf.setLenient(false);
    sdf.parse(dataString);
    }
    catch (Exception e) {
    e.printStackTrace();
    return false;
    }
    return valido;
    }

    public static boolean dataValido(String dataNew) {
    boolean ritorno = true;
    java.sql.Date data = Date.valueOf(dataNew);
    Calendar now = Calendar.getInstance();
    SimpleDateFormat formatter =
    new SimpleDateFormat("dd/mm/yyyy hh:mm:ss");
    java.sql.Date dataCorrente = (Date) now.getTime();
    formatter.format(now.getTime());
    if(data.after(dataCorrente))
    ritorno = false;
    return ritorno;
    }

    Ciao )

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Pagina di ricerca

    Originariamente inviato da valeof
    java.sql.Date data = Date.valueOf(dataNew);
    Calendar now = Calendar.getInstance();
    SimpleDateFormat formatter =
    new SimpleDateFormat("dd/mm/yyyy hh:mm:ss");
    java.sql.Date dataCorrente = (Date) now.getTime();
    Quest'ultima linea è sbagliata. getTime() di Calendar ritorna un java.util.Date, non un java.sql.Date. Il risultato finale è che il cast fallisce a run-time lanciando un bel ClassCastException.

    Se vuoi creare un java.sql.Date, crealo usando il costruttore che prende i millisecondi, passando il valore di ritorno di getTime() di java.util.Date (o di getTimeInMillis() se hai un Calendar).

    Per il resto non ho controllato tutto il codice e non mi è chiaro cosa vuoi fare.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    Ho corretto il titolo.
    La prossima volta cerca di "centrare" il problema... la pagina di ricerca, in questo caso, non ha nulla a che vedere col problema, che riguarda solo le date.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    86

    Ancora riguardo le date

    Grazie della precisazione.
    Il mio problema è effettivamente con le date. Ho modificato il
    metodo "dataValido" secondo il suggerimento:


    /*
    * Convalida la data dicendo se è compatibile con quella corrente
    */

    public static boolean dataValido(String dataNew) {
    boolean ritorno = true;
    java.sql.Date data = Date.valueOf(dataNew);
    Calendar now = Calendar.getInstance();
    long time = now.getTimeInMillis();
    java.sql.Date dataCorrente = new java.sql.Date(time);
    if(data.after(dataCorrente))
    ritorno = false;
    return ritorno;
    } // fine metodo

    Riporto qui un frammento del metodo "doGet" della servlet.
    La servlet reindirizza("forward") la request alla giusta pagina jsp
    dopo aver fatto dei controlli.
    "Valore", "data" e "ora" sono dei parametri.
    Ora però l'applicazione mi va in eccezione, cioè vengono lanciate
    varie eccezioni per diversi motivi, ma francamente penso che
    non accetti il fatto che "dataNew" non è nel formato yy- mm-dd

    String dataNew = UtilityRicerca.dataFormatoDate(data);
    try {
    if(UtilityRicerca.dataFormatoValido(data)){
    if (UtilityRicerca.dataValido(dataNew)) {
    String realPath = request.getRealPath("");
    int index = realPath.indexOf("applications");
    String fileName = realPath.substring(0,index)+"log/FirstProject.log";
    Vector s = UtilityRicerca.leggiFile(fileName,valore, data, ora);
    request.getSession().setAttribute("key", s);
    forward(request,response,"risultatoRicerca.jsp");

    }else {
    if(!UtilityRicerca.dataValido(dataNew)){
    request.getSession().setAttribute("kbSession", new Boolean(true));
    forward(request, response, "ricerca.jsp");
    }
    }
    }else{
    if(!UtilityRicerca.dataFormatoValido(data)){
    request.getSession().setAttribute("kaSession", new Boolean(true));
    forward(request, response, "ricerca.jsp");
    }
    }
    } catch (RuntimeException e) {
    e.printStackTrace();
    }
    }


    Grazie e a presto

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Ancora riguardo le date

    Originariamente inviato da valeof
    codice:
    	public static boolean dataValido(String dataNew) {
    		boolean ritorno = true;
    		java.sql.Date data = Date.valueOf(dataNew);
    		Calendar now = Calendar.getInstance();
    		long time = now.getTimeInMillis();
    		java.sql.Date dataCorrente = new java.sql.Date(time);
    		if(data.after(dataCorrente))
    			ritorno = false;
    		return ritorno;
    	} // fine metodo
    È un po' strano 'sto codice. Innanzitutto valueOf ce l'ha solo java.sql.Date, quindi quel Date è appunto java.sql.Date. Comunque il metodo si aspetta la stringa in un formato ben preciso (lo spiega bene la documentazione) che è "yyyy-mm-dd".

    Poi vedo che crei un Calendar con la data corrente, ne prendi i millisecondi e poi con questi crei un nuovo java.sql.Date che poi usi per il confronto con 'data'. Ma tutto 'sto giro non serve!!
    Se vuoi la data corrente, crea semplicemente un java.util.Date!!!!!

    Per la questione del parsing, se la tua stringa non è nel formato che ho detto sopra, ti conviene usare un SimpleDateFormat per "parsarla" in un formato specifico.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    86

    Urgente

    Il problema è che ho bisogno della data in formato java.sql.Date()
    per fare il confronto tra la data inserita e la data corrente!!!
    Se hai in mente un modo per risolvere questo "enigma",
    te ne sarei grato, è molto urgente!
    La data inserita deve essere formattata come dd/mm/yyyy

    Vale

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Urgente

    Originariamente inviato da valeof
    Il problema è che ho bisogno della data in formato java.sql.Date()
    per fare il confronto tra la data inserita e la data corrente!!!
    Se hai in mente un modo per risolvere questo "enigma",
    te ne sarei grato, è molto urgente!
    La data inserita deve essere formattata come dd/mm/yyyy
    Come ho detto basta usare un SimpleDateFormat e per il confronto non è nemmeno necessario un java.sql.Date.

    String str = "01/01/2000";

    SimpleDateFormat df = new SimpleDateFormat ("d/M/yyyy");
    df.setLenient (false);
    Date d1 = df.parse (str);

    Date d2 = new Date ();

    if (d1.after (d2))
    ......

    Chiaramente il metodo parse() può lanciare ParseException.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    86
    public static boolean valido(){
    String date = "01/01/2000 blahblah";

    SimpleDateFormat formatter = new SimpleDateFormat ("dd/MM/yyyy HH:mm:ss");
    try{
    if(formatter.parse (date)!=null)
    return true;
    else
    return false;
    }
    catch(ParseException){
    return false;
    }
    }

    mi da: "Unparseable date "

    Grazie

    P.S. Vi prego:ho urgenza

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    86

    C'è nessuno?

    Ho risolto il problema dell'eccezione..

    Ma se volessi formattare la data cosi:

    SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm");

    poichè in una ricerca è più probabile indicare l'ora in questo modo.
    Non riesco però a gestire il controllo sui secondi..

    Urgente

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    Originariamente inviato da valeof
    Urgente
    Le urgenze non ci sono in un forum. Tutte le discussioni hanno la stessa medesima urgenza.
    Ciascuno risponde (se vuole) secondo le proprie possibilità.

    Tornando al problema... cosa vuol dire che non riesci a gestire il controllo sui secondi?


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.