PDA

Visualizza la versione completa : [Java] Data Compare


valer_85
14-07-2005, 11:54
sar una cavolata ma sto impazzendo!
guardate questo 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 :dh: :dh: :dh: sto impazzendo... help! grazie

MatCap83
14-07-2005, 14:18
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.....

valer_85
14-07-2005, 15:03
questo il metodo dataComp, prende 2 stringhe, le trasforma in date e le confronta


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:


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 :dh: :dh: :dh: forse il famoso baco del nuovo millennio, nn ancora risolto in java :zizi:

LeleFT
14-07-2005, 15:16
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:


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. :ciauz:

valer_85
14-07-2005, 15:57
stampa la stessa roba... k palleeeeeeeeeeeeeeeeeeee! e poi io nn so neanke cosa significhi deprecated, quindi mi arrangio come posso... :D

LeleFT
14-07-2005, 16:11
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:


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. :ciauz:

valer_85
14-07-2005, 16:14
MITICOOOOOOOOO!!! se fossi di treviso t pagherei una mangiata di pesce! :D

LeleFT
14-07-2005, 16:18
Originariamente inviato da valer_85
MITICOOOOOOOOO!!! se fossi di treviso t pagherei una mangiata di pesce! :D
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. :ciauz:

valer_85
14-07-2005, 16:37
era nel senso se IO fossi di treviso :) dai allora una pizza :maLOL:

LeleFT
14-07-2005, 16:48
:messner:

Loading