View Full Version : [JAVA] Confronto tra date
franksisca
06-07-2009, 09:25
allora, sto gestendo una serie di appuntamenti e relativo storico, solo che mi serve uno storico 2semestrale", ovvero negli ultimi 6 mesi.
ora dato che sono sveglio dalle 9 di ieri mattina :eek: qualcuno potrebbe cercare di salvarmi l'ultimo neurone che ho in testa?
ripeto a me servono gli appuntamenti negli ultimi sei mese, ad esempio
1 appuntamento luglio 2009
2 appuntamento agosto 2009
1 appuntamento settmbre 2009
ne inserisco 1 a marzo 2010 mi deve cancellare tutti tranne quelli nei 6 mesi precedenti a marzo, ovvero agosto e luglio.
grazie mille :D
banryu79
06-07-2009, 10:42
Ehm, sì, ma la domanda qual'è? :D
franksisca
06-07-2009, 11:01
Ehm, sì, ma la domanda qual'è? :D
come verifico se un appuntamento e a 6 (o più) mesi di distanza???
a me servirebbe un metodo di confronto che passategli 2 date mi dice se sono distanti oltre i 6 mesi
banryu79
06-07-2009, 12:03
come verifico se un appuntamento e a 6 (o più) mesi di distanza???
a me servirebbe un metodo di confronto che passategli 2 date mi dice se sono distanti oltre i 6 mesi
Si, ma nel senso: come sono memorizzate le date? usi qualche oggetto apposito, le hai come stringa, altro?
franksisca
06-07-2009, 14:23
Si, ma nel senso: come sono memorizzate le date? usi qualche oggetto apposito, le hai come stringa, altro?
stringhe....e ho un vettore che identifica i mesi
banryu79
06-07-2009, 16:05
stringhe....e ho un vettore che identifica i mesi
Bene, ma continui a essere troppo generico :D
Comunque, per quello che vale, e in base a quello che mi hai detto (e che io ho capito...):
1) la data inserita è una String.
2) estrai dalla String la parte che identifica il mese
3) converti la porzione di stringa che identifica il mese estratto nell'equivalente tipo di valore che memorizzi nel vettore dei mesi: al valore così convertito devi 'sottrarre' 6 posizioni per trovare il mese 'limite' per la cancellazione dei dati.
4) tieni tutti i dati dal mese 'attuale' al mese 'limite': i mesi più vecchi finiscono nel famigerato pozzo dei bit...
Ma ho come il sospetto di non averti detto nulla che già non sapessi da te: non riesco ad essere più specifico se prima non spieghi che cosa hai per le mani con precisione, mica uno se lo può inventare :D
franksisca
06-07-2009, 16:13
Bene, ma continui a essere troppo generico :D
Comunque, per quello che vale, e in base a quello che mi hai detto (e che io ho capito...):
Ma ho come il sospetto di non averti detto nulla che già non sapessi da te: non riesco ad essere più specifico se prima non spieghi che cosa hai per le mani con precisione, mica uno se lo può inventare :D
infatti...a aprte il sonno....a marzo come mi comporto?
banryu79
06-07-2009, 16:25
infatti...a aprte il sonno....a marzo come mi comporto?
Immagino il problema derivi dal fatto che 3 - 6 fa -3... cioè 12 -3 = 9 dell'anno prima.
Per questo volevo sapere che tipi di dato manipoli e come sono organizzati....
Ho capito che sei fuso dal sonno ma fai uno sforzo e prova a descrivere bene:
1) formato dell'oggetto String che descrive una data.
2) cosa infili dentro il Vector 'dei mesi', come l'hai chiamato tu prima :) Ci metti la singola String che rappresenta la data di un appuntamento, ogni volta che l'utente ne inserisce uno?
Alternativa: cacciati otto buone ore di sonno e quando ti sveglierai liquiderai la questione in due minuti ;)
franksisca
06-07-2009, 16:30
Immagino il problema derivi dal fatto che 3 - 6 fa -3... cioè 12 -3 = 9 dell'anno prima.
Per questo volevo sapere che tipi di dato manipoli e come sono organizzati....
Ho capito che sei fuso dal sonno ma fai uno sforzo e prova a descrivere bene:
1) formato dell'oggetto String che descrive una data.
2) cosa infili dentro il Vector 'dei mesi', come l'hai chiamato tu prima :) Ci metti la singola String che rappresenta la data di un appuntamento, ogni volta che l'utente ne inserisce uno?
Alternativa: cacciati otto buone ore di sonno e quando ti sveglierai liquiderai la questione in due minuti ;)
propendo per questa momentaneamente....cmq appena sono menofuso (il caldo non aiuta X_X) mi rifaccio un giro sul codice
cmq PURTROPPO le date hanno un formato "strano":
giornoDellaSettima
giorno
mese
anno
dove giorno della settimana è:
e mese è:
String[] mesi = { "Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre" };
ammetto che è una soluzione ORRIBILE...
la data viene fuori del tipo lunedì 16-luglio-2009
franksisca
06-07-2009, 16:45
come mi piace trovare soluzioni alternative :D
per ora ho fermato lo storico a 30 appuntamenti...appena sono di nuovo READY ripenso ai 6 mesi
Io strutturerei meglio le date con quello che offre Java in modo da sfruttare il compareTo :)
E poi ad ogni inserimento di nuovo appuntamento mi calcolo la data esatta di 6 mesi prima e ricerco ed elimino le date che sono più piccole di questa calcolata.
franksisca
06-07-2009, 22:26
Io strutturerei meglio le date con quello che offre Java in modo da sfruttare il compareTo :)
E poi ad ogni inserimento di nuovo appuntamento mi calcolo la data esatta di 6 mesi prima e ricerco ed elimino le date che sono più piccole di questa calcolata.
se fosse possibile si....ma non posso modificare le date (il formato)
banryu79
07-07-2009, 08:18
Per cominciare, due metodi per estrarre il mese e l'anno da una data:
metodo leggiMese
// supposizioni:
// in una stringa di una data ci sono sempre due caratteri '-'
// il mese è sempre tra il primo carattere '-' e il secondo carattere '-'
String leggiMese(String data)
{
int startIndex = data.indexOf('-') + 1;
int endIndex = data.lastIndexOf('-');
return data.substring(startIndex,endIndex);
}
metodo leggiAnno
// supposizioni:
// in una stringa di una data ci sono sempre due caratteri '-'
// l'anno è sempre dopo il secondo carattere '-';
String leggiAnno(String data)
{
int startIndex= data.lastIndexOf('-');
return data.substring(startIndex+1);
}
...un metodo di confronto tra due date...restituisce un intero che rappresenta la discrepanza in giorni...
public int dateDifference() {
Date from = null;
try {
from = new SimpleDateFormat("dd/MM/yyyy").parse("10/11/2007");
} catch (ParseException e) {
e.printStackTrace();
}
from.getTime();
Date to = null;
try {
to = new SimpleDateFormat("dd/MM/yyyy").parse("10/12/2007");
} catch (ParseException e) {
e.printStackTrace();
}
long diff = to.getTime()-from.getTime();
return (diff / (1000L*60L*60L*24L)+1);
}
...ciao Andrea...
franksisca
07-07-2009, 09:28
Per cominciare, due metodi per estrarre il mese e l'anno da una data:
metodo leggiMese
// supposizioni:
// in una stringa di una data ci sono sempre due caratteri '-'
// il mese è sempre tra il primo carattere '-' e il secondo carattere '-'
String leggiMese(String data)
{
int startIndex = data.indexOf('-') + 1;
int endIndex = data.lastIndexOf('-');
return data.substring(startIndex,endIndex);
}
metodo leggiAnno
// supposizioni:
// in una stringa di una data ci sono sempre due caratteri '-'
// l'anno è sempre dopo il secondo carattere '-';
String leggiAnno(String data)
{
int startIndex= data.lastIndexOf('-');
return data.substring(startIndex+1);
}
grazie mille...potrebbero ritornarmi utili
...un metodo di confronto tra due date...restituisce un intero che rappresenta la discrepanza in giorni...
public int dateDifference() {
Date from = null;
try {
from = new SimpleDateFormat("dd/MM/yyyy").parse("10/11/2007");
} catch (ParseException e) {
e.printStackTrace();
}
from.getTime();
Date to = null;
try {
to = new SimpleDateFormat("dd/MM/yyyy").parse("10/12/2007");
} catch (ParseException e) {
e.printStackTrace();
}
long diff = to.getTime()-from.getTime();
return (diff / (1000L*60L*60L*24L)+1);
}
...ciao Andrea...
grazie anche a te
franksisca
07-07-2009, 10:25
risolto così:
private void aggiornaListaAppuntamenti() {
Appuntamento ultimo = this.appuntamenti.get(0);
Vector<Appuntamento> elementiDaTogliere = new Vector<Appuntamento>();
for (int i = 1; i < this.appuntamenti.size(); ++i) {
Appuntamento temp = this.appuntamenti.get(i);
if (ultimo.getAnno().equalsIgnoreCase(temp.getAnno())) {
if (this.getIndiceMese(ultimo) < 6)
continue;
else if ((this.getIndiceMese(ultimo) - this.getIndiceMese(temp)) < 6)
continue;
else
elementiDaTogliere.add(temp);
} else {
if (this.getIndiceMese(ultimo) > 6)
elementiDaTogliere.add(temp);
else if (((12 + this.getIndiceMese(ultimo)) - this
.getIndiceMese(temp)) < 6)
continue;
else
elementiDaTogliere.add(temp);
}
}
for (Appuntamento appu : elementiDaTogliere) {
this.appuntamenti.remove(appu);
}
}
private int getIndiceMese(Appuntamento appuntamento) {
String[] mesi = { "Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio",
"Giugno", "Luglio", "Agosto", "Settembre", "Ottobre",
"Novembre", "Dicembre" };
for (int i = 0; i < mesi.length; ++i) {
if (appuntamento.getMese().equals(mesi[i]))
return i;
}
return -1;
}
ora mi succede una cosa strana...il cliente che contiene questa lista di appuntamenti viene serializzato e salvato su file, ma quando lo ripristino mi carica tutti i dati tranne questa lista di apppuntamenti O_O
sto dimenticando qualche passaggio?
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.