Visualizzazione dei risultati da 1 a 10 su 10

Discussione: [Java] Data Compare

  1. #1

    [Java] Data Compare

    sarà una cavolata ma sto impazzendo!
    guardate questo codice:
    codice:
    System.out.println("Comparazione: "+a.dataComp("10/06/1985","09/06/1985"));
    
    //altra comparazione
    String data1 = 25/05/2005
    String data2 = 11/06/2005
    System.out.println("Comparazione2: "+a.dataComp(data1,data2));
    il metodo dataComp è un semplice metodo per leggere 2 date da 2 stringhe e compararle col metodo compareTo della classe Date. se la prima data è maggiore della seconda ritorna 1, seno -1. il problema è che entrambe le comparazioni sopra stampano:

    Comparazione: 1
    Comparazione2: 1

    mentre la seconda dovrebbe stampare -1!!!!!!!!!!! il metodo usato funziona xk l'ho testato sto impazzendo... help! grazie

  2. #2
    Utente di HTML.it L'avatar di MatCap83
    Registrato dal
    Jun 2005
    residenza
    Firenze
    Messaggi
    1,319
    Non ho capito che cosa e' il metodo dataComp, da quanto hai scritto ho capito che questo dovrebbe andare a comparare le due date passate in ingresso. Per quanto riguarda il metodo compareTo della classe Date, questo controlla se due oggetti Date si riferiscono alla stessa data, e fin quì tutto ok, il metodo funziona bene! Invece per dataComp non so, sicuramente c' e' un errore nel codice, quando si paragonano le due date, fai vedere il codice.....
    "Nessuno mi ha visto farlo, e non puoi provarlo in nessun modo!" (Bart Simpson)

    >>> www.ombresulweb.com <<<

  3. #3
    questo è il metodo dataComp, prende 2 stringhe, le trasforma in date e le confronta
    codice:
    public int dataComp(String d1,String d2){
    		int day = Integer.parseInt(d1.substring(0,2));
    		int month = Integer.parseInt(d1.substring(3,5));
    		int year = Integer.parseInt(d1.substring(6,10));
    		int day2 = Integer.parseInt(d2.substring(0,2));
    		int month2 = Integer.parseInt(d2.substring(3,5));
    		int year2 = Integer.parseInt(d2.substring(6,10));
    		Date data1 = new Date(day, month, year);
    		Date data2 = new Date(day2, month2, year2);
    		return data1.compareTo(data2);
    	}
    il paradosso è ke invocando lo stesso metodo su 2 date, in questo modo:
    codice:
    System.out.println("Comparazione2: "+a.dataComp("11/06/2005","25/05/2005"));
    		System.out.println("Comparazione: "+a.dataComp("10/06/1985","09/06/1985"));
    ecco cosa stampa:
    Comparazione2: -1
    Comparazione: 1

    aaaaaaaaaaaaaaaaarrrrgggggggggggggggggg forse è il famoso baco del nuovo millennio, nn ancora risolto in java

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Non credo che sia il famoso baco del millennio (che peraltro non ha significato su architetture posteriori al 1980...)

    Innanzitutto non vedo come tu possa ancora utilizzare i costruttori deprecati di Date: è scritto ben chiaro nella documentazione che al loro posto va utilizzata la classe Calendar (nella fattispecie, GregorianCalendar).

    Prova così:
    codice:
    public int dataComp(String d1,String d2){
       int day = Integer.parseInt(d1.substring(0,2));
       int month = Integer.parseInt(d1.substring(3,5));
       int year = Integer.parseInt(d1.substring(6,10));
       int day2 = Integer.parseInt(d2.substring(0,2));
       int month2 = Integer.parseInt(d2.substring(3,5));
       int year2 = Integer.parseInt(d2.substring(6,10));
       Date data1 = (new GregorianCalendar(day, month, year)).getTime();
       Date data2 = (new GregorianCalendar(day2, month2, year2)).getTime();
       return data1.compareTo(data2);
    }
    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

  5. #5
    stampa la stessa roba... k palleeeeeeeeeeeeeeeeeeee! e poi io nn so neanke cosa significhi deprecated, quindi mi arrangio come posso...

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Deprecated significa che bisogna evitare di usarli in quanto potrebbero non essere più supportati nelle release future.

    Mi sa che ho sbagliato a postare io: devi invertire l'ordine dei parametri da passare al costruttore di GregorianCalendar. Il primo è l'anno, il secondo il mese ed il terzo il giorno.
    Ho provato e funziona. Ecco l'esempio:
    codice:
    import java.util.*;
    
    public class MiaData {
       public static void main(String [] a) {
          String data1 = "11/06/2005";
          String data2 = "25/05/2005";
          System.out.println( compData(data2, data1) );
       }
    
       public static int compData(String d1, String d2) {
          int day = Integer.parseInt(d1.substring(0,2));
          int month = Integer.parseInt(d1.substring(3,5));
          int year = Integer.parseInt(d1.substring(6,10));
          int day2 = Integer.parseInt(d2.substring(0,2));
          int month2 = Integer.parseInt(d2.substring(3,5));
          int year2 = Integer.parseInt(d2.substring(6,10));
          Date data1 = (new GregorianCalendar(year, month, day)).getTime();
          Date data2 = (new GregorianCalendar(year2, month2, day2)).getTime();
          return data1.compareTo(data2);
       }
    }
    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

  7. #7
    MITICOOOOOOOOO!!! se fossi di treviso t pagherei una mangiata di pesce!

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Originariamente inviato da valer_85
    MITICOOOOOOOOO!!! se fossi di treviso t pagherei una mangiata di pesce!
    Ti andrebbe male: non mi piace il pesce!

    Ad ogni modo, anche il costruttore della classe Date vuole l'ordine parametri di GregorianCalendar, quindi era per quello che non ti funzionava.

    Comunque io sono di Treviso... :master:

    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

  9. #9
    era nel senso se IO fossi di treviso dai allora una pizza :maLOL:

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    "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 © 2024 vBulletin Solutions, Inc. All rights reserved.