|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: May 2004
Città: milano
Messaggi: 558
|
C# confronto datetime
ciao a tutti
ho un piccolo problema che non saprei come risolvere, devo dare in output il "turno" corrente di lavoro. Se ad esempio ho 2 turni (1)09:00 - 18:00 e (2)18:00-09:00 e l'ora corrente è 08:30, il sistema mi deve dare in output il 2o turno che è a cavallo tra due giorni. Come posso fare usando il datetime?
__________________
"ki ha scritto queste stronzate?" disse il cieco toccando la grattugia! |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quote:
Codice:
DateTime dt=DateTime.Now; string turno; if (dt.Hour>=9 && dt.Hour<18) turno = "turno1"; else turno = "turno2"; Meglio che spieghi un po' di piu'
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
|
che struttura usi per il turno di lavoro?
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: May 2004
Città: milano
Messaggi: 558
|
i turni non li so a priori!! altrimenti avrei già risolto la cosa!
se faccio semplicemente Datetime.Now() >= inizio turno e Datetime.Now() <= fineturno non basta! perchè il 20 turno non viene gestito! se adesso sono le 7, 7 non è maggiore di 18. nel db ho una tabella che indica l'ora e i minuti di inizio e fine di ciascun turno. esempio Shift Description FromTime ToTime DD 09:00-18:00 9.00 17.59 NN 18:00-09:00 18.00 8.59
__________________
"ki ha scritto queste stronzate?" disse il cieco toccando la grattugia! |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: May 2004
Città: milano
Messaggi: 558
|
ok risolto, come non detto! devo splittare il turno e considerare la mezzanotte.
Codice:
foreach (Shift sh in GlobalVars.ShiftList)
{
string[] spl = sh.FromTime.ToString("00.00", provider).Split('.');
Int32 HourFrom = Int32.Parse(spl[0]);
Int32 MinutesFrom = Int32.Parse(spl[1]);
spl = sh.ToTime.ToString("00.00", provider).Split('.');
Int32 HourTo = Int32.Parse(spl[0]);
Int32 MinutesTo = Int32.Parse(spl[1]);
DateTime timeShiftStart = new DateTime(GetToday().Year, GetToday().Month, GetToday().Day, HourFrom, MinutesFrom, 0);
DateTime timeShiftEnd = new DateTime(GetToday().Year, GetToday().Month, GetToday().Day, HourTo, MinutesTo, 0);
DateTime timeShiftComparison = new DateTime(GetToday().Year, GetToday().Month, GetToday().Day, GetToday().Hour, GetToday().Minute, 0);
if (timeShiftComparison >= timeShiftStart && timeShiftComparison <= timeShiftEnd)
{
return sh.ShiftName;
}
if (timeShiftEnd < timeShiftStart)
{
// shift 18:00 - 09:00
// devo considerare mezzanotte!
DateTime midnight1 = new DateTime(GetToday().Year, GetToday().Month, GetToday().Day, 23, 59, 59);
// mezzanotte del giorno dopo
DateTime midnight2 = new DateTime(GetToday().Year, GetToday().Month, GetToday().Day, 0, 0, 0);
if (((timeShiftComparison.Hour >= timeShiftStart.Hour) && (timeShiftComparison.Minute >= timeShiftStart.Minute))
&&
((timeShiftComparison.Hour <= midnight1.Hour) && (timeShiftComparison.Minute <= midnight1.Minute))
)
{
return sh.ShiftName;
}
else if (((timeShiftComparison.Hour >= midnight2.Hour) && (timeShiftComparison.Minute >= midnight2.Minute))
&&
((timeShiftComparison.Hour <= timeShiftEnd.Hour) && (timeShiftComparison.Minute <= timeShiftEnd.Minute))
)
{
return sh.ShiftName;
}
}
}
__________________
"ki ha scritto queste stronzate?" disse il cieco toccando la grattugia! |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quote:
Se e' cosi', cerca qual e' l'unico turno a cavallo di 2 giorni. Escludilo e tieni tutti gli altri. Li percorri in ciclo cercando di vedere se l'ora corrente appartiene a quel particolare turno. Se arrivi alla fine e non hai trovato allora si tratta del turno che avevi escluso, quello a cavallo. Scrivi meta' di quello che hai scritto.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
|
piú che altro...
gugoXX che classe usi per mappare una specifica ora:minuti:secondi di un generico giorno? DateTime é uno specifico istante nel tempo. TimeSpan é un generico intervallo di tempo. Ma sbaglio o nella bcl manca qualcosa orientato alla gestione del tempo? |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Quote:
sulla quale si possono usare tutti i comparer standard e operatori come > < etc.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:29.




















