Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 1.0/1.1
Problemi di ordinamento date
lunedì 25 febbraio 2008 - 11.09
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
supremeprogrammer
Profilo
| Newbie
10
messaggi | Data Invio:
lun 25 feb 2008 - 11:09
Ciao a tutti,ho un problema da sottoporvi.
Mi ritrovo un datatable con n righe dove per ogni riga ho due colonne, ognuna con una data.Indi percui per ogni riga ho data_inizio_intervallo e data_fine_intervallo.
Ho poi una web form asp net (c#) con due textbox dove l'utente deve inserire altre due date.
Devo controllare che tali date non siano comprese o a cavallo degli intervalli di tempo con data inizio e data fine presi da ciascuna riga del datatable.
Insomma alla fine devo consentire il salvataggio delle date inserite dall'utente solo se esse risultano individuare un intervallo di tempo non compreso,che non comprende o che non è a cavallo di nessuno degli intervalli individuati dalle date presenti in ciascun record.
Conoscete qualche algoritmo che mi faciliti il compito o avete una qualche idea per risolvere la cosa.
Mi si continuano ad ingarbugliare le idee e non riesco ad avere un approccio corretto alla risoluzione del problema.
Ho provato a fare una matrice dove ad ogni riga oltre alle date prese dal datatable,metto l'esito della verifica rispetto alle date inserite dall'utente.Però poi,anche se in nessuna riga vi sia sovrapposizione di intervalli di tempo in caso di tentativo di inserimento della data iniziale casualmente coincidente con la data finale di uno dei periodi presenti nel datatable,mi serve comunque aumentare di un giorno la data che si sta cercando di inserire,in modo da non farle coincidere.
Grazie infinite anticipatamente
P.S.:Dubbio atroce... posso confrontare banalmente due date così: data1<data2?
Ferux
Profilo
| Newbie
44
messaggi | Data Invio:
lun 25 feb 2008 - 12:15
Ciao,
per quanto riguarda il dubbio atroce in vb .net esiste una funzione DateDiff che fa il confronto tra date.
Per il resto del problema devi inserire le date in una struttura tipo Dictionary, l'importante è che implementi la IList. (se la collection implementa la Ilist può essere bindato al gridview\datagrid)
http://msdn2.microsoft.com/it-it/library/3eayzh46
(VS.80).aspx
Pertanto ti tieni in Sessione la struttura e prima dell'inseriemnto verifichi che non esista l'elemento appena inserito: se il controllo va bene allora inserisci nella collection l'elemento e lo bindi al datagrid.
Spero di essere stato chiaro
Ing Ferux
[MCP MCAD]
supremeprogrammer
Profilo
| Newbie
10
messaggi | Data Invio:
lun 25 feb 2008 - 13:32
Ciao,
innanzitutto grazie per la risposta.
Credo che il tutto sia un po più complesso di come pensi,questo perchè non mi devo limitare a controllare che le date che l'utente vuole inserire siano presenti tra quelle esistenti nel Dictionary o matrice che sia.Devo controllare pure che l'intervallo che ha come estremi tali date non sia compreso,che comprenda o che sia a cavallo di nessun intervallo che abbia come estremi una coppia di date presenti nella matrice o dizionario.
Mettici poi che in caso l'utente cerchi di inserire una data iniziale che coincide con una data finale esistente nel dictionary o cerchi di inserire una data finale che coincide con una data iniziale esistente nel dictionary,deve essere incrementata di un giorno la data da inserire e controllare nuovamente che il nuovo intervallo rientri nei canoni di inserimento.
In quanto a DateDiff,non esiste nulla per C#? Confrontare due date con l'operatore < o col > proprio non si può?
Grazie
Ferux
Profilo
| Newbie
44
messaggi | Data Invio:
lun 25 feb 2008 - 13:53
Ciao,
ecco la versione c#
Ciao,
ecco la versione c#
public static long DateDiff(DateInterval interval, DateTime startDate, DateTime endDate)
{
long dateDiffVal = 0;
Calendar cal = Thread.CurrentThread.CurrentCulture.Calendar;
TimeSpan ts = new TimeSpan(endDate.Ticks - startDate.Ticks);
switch (interval)
{
case DateInterval.Day:
dateDiffVal = (long)ts.TotalDays;
break;
case DateInterval.Hour:
dateDiffVal = (long)ts.TotalHours;
break;
case DateInterval.Millisecond:
dateDiffVal = (long)ts.TotalMilliseconds;
break;
case DateInterval.Minute:
dateDiffVal = (long)ts.TotalMinutes;
break;
case DateInterval.Month:
dateDiffVal = (long)(((cal.GetYear(endDate)
- cal.GetYear(startDate)) * 12
+ cal.GetMonth(endDate))
- cal.GetMonth(startDate));
break;
case DateInterval.Quarter:
dateDiffVal = (long)((((cal.GetYear(endDate)
- cal.GetYear(startDate)) * 4)
+ ((cal.GetMonth(endDate) - 1) / 3))
- ((cal.GetMonth(startDate) - 1) / 3));
break;
case DateInterval.Second:
dateDiffVal = (long)ts.TotalSeconds;
break;
case DateInterval.Week:
dateDiffVal = (long)(ts.TotalDays / 7);
break;
case DateInterval.Year:
dateDiffVal = (long)(cal.GetYear(endDate) - cal.GetYear(startDate));
break;
}
return dateDiffVal;
Utilizza le collection: fai una classe Orari ed una Orario (dove Orari e una list<Orario>), nella classe orario poi metti dei metodi per il controllo sull'inserimento.
Orari orari = new Orari();
Orario orario = new Orario(datainizio,datafine);
if(orari.IsPossibleToInsert() == true)
{
orari.Add(orario);
}
IsPossibleToInsert() == in questo metodo metti le tue regole per inserire l'orario. Questo metodo è della classe Orari e quindi basta che fai un foreach sugli elementi presenti.
Nella classeorari metti il metodo privato DateDiff che ti ho fornito.
Essendo una collection implementa IList ed è bindabile.
Saluti
Ing Ferux
[MCP MCAD]
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !