Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [JAVA]confronto date con GregorianCalendar

    Dunque devo confrontare una data che estraggo da un campo DATE di Oracle con la data di oggi per vedere quale viene prima (ovviamente le 2 date possono anche coincidere)
    Ho pensato(più che altro è la prima cosa che ho trovato :-) ) di usare l'oggetto GregorianCalendar e il metodo compareTo dell'oggetto Date per il confronto.
    Ho quindi usato il seguente codice per estrarre la data di oggi:

    GregorianCalendar c=new GregorianCalendar() ;
    Date data di oggi=c.getTime();

    e il seguente codice per avere la data dal db:

    String select="SELECT...";
    Resultset rs = stmt.executeQuery(sel);
    if(rs.next()) {
    Date dataDb=rs.getDate("DATA");
    }
    GregorianCalendar c2=new GregorianCalendar() ;
    c2.setTime(dataDb);
    Date dataDaConfrontare=c2.getTime();


    Ecco facendomi stampare le 2 date ottengo(in questo caso anche nel db c'è la data di oggi):
    data di oggi: Jun 01 17:55:08 CEST 2005
    data nel db: Jun 01 00:00:00 CEST 2005

    il confronto col compareTo() risulta quindi impreciso in quanto da una parte ci sono minuti ecc. e dall'altra no(e in un caso come quello sopra ad esempio le 2 date non risulterebbero uguali per via dei minuti ecc.)-
    ho quindi agito così:

    Data di oggi:
    GregorianCalendar c=new GregorianCalendar() ;
    Date dataOggi=c.getTime();


    Data db:
    String select="SELECT...";
    Resultset rs = stmt.executeQuery(sel);
    if(rs.next()) {
    Date dataDb=rs.getDate("DATA");
    }
    GregorianCalendar c2=new GregorianCalendar();
    c2.setTime(dataDb);
    int giorno2=c2.get(Calendar.DAY_OF_MONTH);
    int anno2=c2.get(Calendar.YEAR);
    int mese2=c2.get(Calendar.MONTH);
    GregorianCalendar k2=new GregorianCalendar() ;
    k2.set(anno2, mese2, giorno2);
    Date dataDBfinale=k2.getTime();

    Ok ora dataOggi e dataDBfinale sono confrontabili e tutto funziona; il codice non mi sembra però molto pulito e bello.
    Che potevo fare (sempre usando GregorianCalendar)???

    C'è anche qualche oggetto diverso (e migliore) rispetto a GregorianCalendar??
    Intanto che qualcuno risponde cerco anchio di migliorare il codice

    ciao e grazie

  2. #2
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    c2.setTime(dataDb);
    c2.set(Calendar.HOUR, 0);
    c2.set(Calendar.MINUTE, 0);
    c2.set(Calendar.SECONDS, 0);
    c2.set(Calendar.MILLISECOND, 0);
    e usi c2

  3. #3
    ora guardo grazie

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Come indicato nel Regolamento, il linguaggio di programmazione di riferimento va specificato anche nel titolo della discussione.

    In questo modo, ciascun frequentatore del forum può valutare le proprie possibilità di fornire un valido aiuto senza essere costretto a leggere l'intero messaggio.

    Il titolo di questa discussione lo modifico io.

    Suppongo si tratti di Java...confermi?

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    niente se fai come dici tu e poi fai

    Date dataDBfinale=c2.getTime();

    non funziona infatti se mi faccio stampare a video la data che ottengo vedo
    Wed Jun 01 00:00:00 CEST 2005

    mentre la data ottenuta con

    GregorianCalendar c=new GregorianCalendar() ;
    Date dataOggi=c.getTime();

    ha anche i secondi, ecc

    in particolare è questa parte(nel mio codice):
    int giorno2=c2.get(Calendar.DAY_OF_MONTH);
    int anno2=c2.get(Calendar.YEAR);
    int mese2=c2.get(Calendar.MONTH);
    GregorianCalendar k2=new GregorianCalendar() ;
    k2.set(anno2, mese2, giorno2);

    che mi lascia insoddisfatto ma d'altra parte non riesco a fare altro per avere due date confrontabili(tra laltro a me di confrontare minuti,secondi e ore non frega nulla)

  6. #6
    Originariamente inviato da alka
    Come indicato nel Regolamento, il linguaggio di programmazione di riferimento va specificato anche nel titolo della discussione.

    In questo modo, ciascun frequentatore del forum può valutare le proprie possibilità di fornire un valido aiuto senza essere costretto a leggere l'intero messaggio.

    Il titolo di questa discussione lo modifico io.

    Suppongo si tratti di Java...confermi?

    Ciao!
    scusami tanto, melo son dimenticato, si è JAVA

  7. #7
    guardando il codice mi è sembrato meglio complicarlo ultriormente :-)

    infatti(ho provato con mysql e non con oracle) sono giunto alla conclusione che è meglio scrivere così:

    Data di oggi:
    GregorianCalendar c=new GregorianCalendar() ;
    c.set(Calendar.HOUR, 0);
    c.set(Calendar.MINUTE, 0);
    c.set(Calendar.SECOND, 0);
    c.set(Calendar.MILLISECOND, 0);
    Date dataOggi=c.getTime();


    Data db:
    String select="SELECT...";
    Resultset rs = stmt.executeQuery(sel);
    if(rs.next()) {
    Date dataDb=rs.getDate("DATA");
    }
    GregorianCalendar c2=new GregorianCalendar();
    c2.setTime(dataDb);
    int giorno2=c2.get(Calendar.DAY_OF_MONTH);
    int anno2=c2.get(Calendar.YEAR);
    int mese2=c2.get(Calendar.MONTH);
    GregorianCalendar k2=new GregorianCalendar() ;
    k2.set(anno2, mese2, giorno2);
    k2.set(Calendar.HOUR, 0);
    k2.set(Calendar.MINUTE, 0);
    k2.set(Calendar.SECOND, 0);
    k2.set(Calendar.MILLISECOND, 0);
    Date dataDBfinale=k2.getTime();

    in questo modo son sicuro che entrambe le date avranno minuti,secondi ecc uguali a 0 e pertanto saranno confrontabili solo giorno mese e anno (prima invece settavo all'interno della data del db i minuti ecc allo stesso valore che avevano nella data odierna ma mi sembra rischioso)

    la faccenda si complica...

    cmq grazie

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 © 2024 vBulletin Solutions, Inc. All rights reserved.