PDA

View Full Version : [C#..ma anche no..]maledetta mezzanotte


RaouL_BennetH
07-03-2007, 14:47
Ciao a tutti :(

Allora, il mio problemuccio è questo.

Valori di tipo double (che poi vengono valutati in unità di tempo, per es.:

var1 = 18.00 var2 = 22.00

In base ad una semplice operazione (var2 - var1) mi da correttamente 4.00

Ora...

var1 = 22.00 var2 = 00.30

devo fare in modo che mi restituisca 2.30 (o 2.50)

Il codice che di sicuro posterete sul Daily Wtf è questo:



DateTime dt1, dt2;
bool b1, b2;

b1 = DateTime.TryParse(dataGridView1.Rows[e.RowIndex].Cells[3].Value.ToString(), out dt1);
b2 = DateTime.TryParse(dataGridView1.Rows[e.RowIndex].Cells[4].Value.ToString(), out dt2);

TimeSpan ts = dt2.Subtract(dt1);

dataGridView1.Rows[e.RowIndex].Cells[7].Value = ts.ToString();


Plz... :help:

PGI-Bis
07-03-2007, 15:35
se v1 > v2
r = (24 - v1) + v2;
altrimenti
r = v2 - v1;

Forse si può fare anche con i moduli.

RaouL_BennetH
07-03-2007, 16:43
se v1 > v2
r = (24 - v1) + v2;
altrimenti
r = v2 - v1;

Forse si può fare anche con i moduli.

Questa è stata la prima cosa che ho fatto (riferendomi ai valori contenuti nelle celle).



Il risultato però non va, mi da valori del tipo:

-7356788

(oltre a non permettermi di sottrarre da un numero (sia esso int che double) un tipo datetime)

PGI-Bis
07-03-2007, 17:00
E tra l'altro ho fatto le ore di 100 minuti :D. Caliamo un velo pietoso sul mio intervento, siamo buoni.

A te interessano solo ore e minuti o ci sono di mezzo anche i giorni?

RaouL_BennetH
07-03-2007, 17:02
solo ore e minuti :)

PGI-Bis
07-03-2007, 17:13
Allora potresti prendere ora e minuti dai due DateTime, sottrarli e poi creare un nuovo DateTime. Metti insieme una classettina che te lo faccia senza patemi, tipo:

MyTime v1 = new MyTime(dateOne);
MyTime v2 = new MyTime(dateTwo);
MyTime sub = v2.subtract(v1);
DateTime subTime = MyTime.toDateTime();

RaouL_BennetH
07-03-2007, 18:24
Il problema è che non riesco a fargli rappresentare in nessuna maniera la mezzanotte come 24:00:00 :muro:

Anche facendo la classe, il datetime appena arriva alle '24' porta il valore a '00'.

RaouL_BennetH
07-03-2007, 18:44
Boh, per ora ho risolto così:



if( tempo1 > tempo2)
{
TimeSpan partial = (DateTime.Today.AddHours(-24) - tempo1);
DateTime total = tempo2.Add(partial);
}

....bla....horrorcodingalot.....bla..

RaouL_BennetH
08-03-2007, 08:10
Wow, l'ho ridotto ad una riga:



If(tempo1 > tempo2)
{
TimeSpan ts = temp2.AddHours(24) - tempo1;
}