Newsgroup: it.comp.java
Titolo: HelpMe gestire le ore di un giorno per una Agenda Personale.please!!!

Salve ho letto i vecchi post per gestire le date, infatti sulle date non ho 
alcun problema, grazie agli oggeti Date SimpleDateFormat o Calendar e 
GregorianCalendar.
Il mio problema č questo:
devo realizare un programma che gestisce una Agenda personale, che quindi 
gestisca appuntamenti per descrizione data ora di inizio e ora di fine 
appuntamento, che implementi i metodi per inserire un appuntamento, leggere 
un range di appuntamenti appartenenti ad un determinato giorno, e la ricerca 
di un appuntamento per data , per ora_inizio, per descrizione.
Io ho realizzato un oggetto Appuntamento che gestisce un singolo 
appuntamento con i campi: descrizione, data, ora_inizio,ora_fine. E poi ho 
creato un oggetto Agenda che crea un ArrayList di appuntamenti ed implementa 
tutti i metodi di lettura,inserimento,e ricerca.(Se credete che tutto si 
possa gestire in modo diverso accetto qualunque consiglio, grazie).
Io nella classe Agenda ho creato un metodo che permette di leggere un range 
di appuntamenti per la data, un metodo che permette di cercare 
nell'ArrayList degli appuntamenti un appuntamento in base al giorno!
Perň non so come fare per creare un metodo che mi permetta di cercare un 
appuntamento nell'ArrayList di tutti gli appuntamenti in base all'ora, 
perchč: io accetto un oraio_inizio tipo hh:mm:ss come paramentro. come la 
gestisco questo orario, visto che un oggetto Date o Gregorian non si puo' 
creare senza mettere anche una data??? e come faccio a fare un confronto (in 
base al formato usato per la data) per capire se un orario viene prima o 
dopo di un'altro???
Mi spiego meglio: ad esempio se io ho un array che contiene orari in un 
qualche formato come faccio a confrontare due orari fra loro per capire 
quale venga prima o dopo di un'altro???
usando un metodo di ricerca binaria risolvo la ricerca, ma il Formato e il 
Confronto fra gli orari non so proprio come farlo!!!
Gentilemente datemi un consiglio o un aiuto per risolvere questo problema!!!
Grazie a tutti per una vostra risposta !!! CIAO :D

 appuntamento con i campi: descrizione, data, ora_inizio,ora_fine. E poi ho 
E perche' non usare invece: descrizione, data e ora inizio, data e ora 
fine?
In questo modo puoi usare i metodi after e before delle classi Calendar 
e Timestamp.
-- 
Gangio (
andrea@g_a_n_g_i_n_i.net
)
http://www.gangini.net
Leva gli underscore per mandarmi una mail

 ----------------------
No scusami mi sono espresso male io forse,il mio problema non č confrontare 
i due orari  ora_inizio e ora_fine, altrimenti era semplice :D !!!
Io nell'arrayList ho oggetti che hanno data ora_inizio ora_fine 
descrizione( anche se aggiungo la data a tutte le ore e trasformo l'oggetto 
in: descrizione, dataOra_inizio e dataOra_fine) non cambia nulla.Perchč, io 
devo cercare un appuntamento in base all'ora di inzio (l'ora di fine non 
serve a nulla, serve a me per altre cose) cioč per essere prescisi io devo 
fare in modo che l'utente inserisca un'orario e io gli dia come risposta gli 
appuntamenti presenti nell'ArrayList che hanno quell'ora esatta, anche se č 
di 100 giorni precedenti o avanti la data non interessa!!Capito???
esempio:
Inserisca l'ora: 23:15:30
Fra tutti gli appuntamenti ci sono 10 appuntamenti con quest'ora: 23:15:30. 
E sono:
appuntamento 1
appuntamento 2
appuntamento 3
ecc...
al posto della scritta appuntamento 1,2,3 io poi ci stampo il toString di 
ogni appuntamento cosě che l'utente,possa leggere tutto il contenuto di ogni 
appuntamento!
Claro :D  ??? per la ricerca tutto il resto che mi serve provvedo io, io 
voglio solo capire come poter gestire l'ora nel senso, di come trasformare 
il parametro ora(hh:mm:ss) che prendo in input, in un formato adatto per 
poterlo usare poi, per effettuare confronti con altri orari !!!!
grazie per l'aiuto!
Ciao 

 poterlo usare poi, per effettuare confronti con altri orari !!!!
Converti l'orario in un numero; in questo modo potrai fare confronti.
esempio:
14:12:33 diventa 14*3600 + 12*60 + 33
20:11:05 diventa 20*3600 + 11*60 + 05
00:00:15 diventa 15
in pratica trasformi l'orario in "numero di secondi dopo la mezzanotte" 
e se ti serve solo sapere se un orario e' prima , uguale, o dopo di un 
altro sei a posto.
Se ti servono confronti di altro tipo allora ho bisogno di maggiori 
dettagli.


 dettagli.
E' meglio usare la classe GregorianCalendar (sottoclasse di Calendar),
che ha tutti i metodi che servono. IMHO, se devi gestire date/orari
questa E' la classe da usare.
Ciao Jack

 questa E' la classe da usare.
Infatti era quello che gli avevo consigliato, ma sembra che lui voglia 
agire unicamente su un datatype "orario" in formato 24h (che non mi 
sembra esista in java, in quanto c'e' sempre associata una data ai vari 
Timestamp calendear gregoriancalendar date ecc ecc).
Io avrei instanziato un bel calendar che ne so, all' 1/1/1980, settato 
l'orario tramite i metodi predisposti e poi avrei fatto i confronti 
sempre utilizzando gli strumenti che mi dava la classe, ma sembra che 
per lui questa soluzione non andasse bene.


 bene.
Scusami credo di non aver capito bene in che modo avresti risolto 
te,comunque ti faccio un esempio.
Diciamo che io mi sia creato oggetti GregorianCalendar con data e 
ora_inizio(quindi ho un array di gregorianCalendar).
Poi quando da consolle l'utente vuole cercare fra tutti gli appuntamenti, 
quelli che hanno la stessa data che lui mi fornisce in input, come potrei 
fare???
Dovrei associare un data a caso a questo orario preso in input  e creare un 
GregorianCalendar e poi effettuare la ricerca, però quando vado a 
confrontare l'oggeto GregorianCalendar costruito con l'oraio preso in input 
e quelli del mio array, dovrei confrontare solo gli orari senza badare alla 
data in modo da poter verificare quanti e quali sono gli appuntamenti con lo 
stesso identico orario di quello preso in input! Anche se non saprei come 
confrontare solo le date perchè non vedo un metodo che lo faccia nella 
classe GregorianCalendar.Quindi cmq non ho risolto nulla!!!
Adesso se vuoi darmi una mano gentilmente fammi un esempio pratico, fammi 
vedere come confronti "SOLO" l'oraio fra 2 oggetti GregorianCalendar!!!
Scusami se non riesco a capirti e ti faccio perdere un po di tempo. Ti 
ringrazio per una tua risposta!!! 

 vedere come confronti "SOLO" l'oraio fra 2 oggetti GregorianCalendar!!!
Il tutto sta nel porsi in una condizione confrontabile: io farei un bel 
metodo tipo:
public Calendar normalizeCalendar(Calendar cal){
	cal.set(Calendar.YEAR, 1980);
	cal.set(Calendar.MONTH, Calendar.JANUARY);
	cal.set(Calendar.DAY_OF_MONTH, 1);
	cal.set(Calendar.MILLISECOND, 0);
	return cal;
}
A questo punto, quando l'utente specifica un orario da ricercare:
//istanzio un nuovo oggetto Calendar
Calendar orarioDaRicercare = Calendar.getInstance();
//lo normalizzo per poterlo confrontare
orarioDaRicercare = normalizeCalendar(orarioDaRicercare);
//setto ora minuti e secondi come specificato dall'utente
orarioDaRicercare.set(Calendar.HOUR_OF_DAY, 18);
orarioDaRicercare.set(Calendar.MINUTE, 42);
orarioDaRicercare.set(Calendar.SECOND, 12);
//cerco un orario che matcha nel mio arraylist che contiene gli appuntamenti
for (Calendar appuntamentoSalvato : mioArrayList) {
 
	//i calendar hanno la stessa data, li posso confrontare
	if (orarioDaRicercare.getTimeInMillis() == 
normalizeCalendar(appuntamentoSalvato).getTimeInMillis() ) {
		System.out.println("Orario coincide");
	}
 
	//ora posso anche usare i metodi after e before
	if (orarioDaRicercare.after(normalizeCalendar(appuntamentoSalvato)) ) {
		System.out.println("E' dopo");
	}
	if (orarioDaRicercare.before(normalizeCalendar(appuntamentoSalvato)) ) {
		System.out.println("E' prima");
	}
}
Questo e' un modo di farlo usando solo le classi Java.


Grazie 1000, non capivo perchč non conoscevo bene quei metodi di Calendar, 
ti ringrazio per l'aiuto, gentilissimo!!!