Avatar billede mr_miyagi Nybegynder
01. september 2006 - 10:53 Der er 18 kommentarer og
1 løsning

læg to DateTime sammen i c#

Hej jeg har et lille problem med at lægge to datoer sammen, hvordan gør man det i c#.
jeg har ingen problemer med at trække dem fra hinanden, der gør jeg sådan her:

strTimeUsed = DateTime.Parse(DateTime.Now.ToShortTimeString()) - DateTime.Parse(lblTimeStart.Text) + "";

Skifter jeg minus ud med plus, får jeg fejlen:
"Operator '+' cannot be applied to operands of type 'System.DateTime' and 'System.DateTime'"

Hvordan kan man ellers gøre det på en nem måde nu når man ikke kan lægge dem sammen med +.
Avatar billede spif2001 Nybegynder
01. september 2006 - 11:03 #1
Hvorfor vil du lægge dem sammen?

Hvad skal 1/1/2006 kl. 12:12:34  +  2/1/2006 kl. 15:13:45 give som resultat?
Avatar billede mr_miyagi Nybegynder
01. september 2006 - 11:07 #2
jeg skal fjerne datoen. så det kun er tiden jeg skal lægge sammen
Avatar billede mr_miyagi Nybegynder
01. september 2006 - 11:11 #3
string strTimeUsed = DateTime.Parse(DateTime.Now.ToShortTimeString()) - DateTime.Parse(lblTimeStart.Text) + "";


Fordi jeg skal bruge noget i denne stil:
string TidBrugtIAlt = DateTime.Parse(TidBrugtIAlt) + DateTime.Parse(strTimeUsed) + "";
Avatar billede spif2001 Nybegynder
01. september 2006 - 11:12 #4
hmmm..  du kan evt bruge TimeSpans a la

TimeSpan ts = DateTime.Now.TimeOfDay;
TimeSpan ts2 = DateTime.Now.TimeOfDay.Add(new TimeSpan(3,0,0));
ts.Add(ts2);

Nu har du ikke vist så meget kode, så du må selv passe det ind, men det kan vel give dig idéen til en mulig løsning.
Avatar billede mr_miyagi Nybegynder
01. september 2006 - 11:12 #5
hvor TidBrugtIAlt starter på nul, og efterfølgende bliver strTimeUsed lagt til TidBrugtIAlt
Avatar billede nielle Nybegynder
01. september 2006 - 11:31 #6
For nu at bruge spif2001's eksempel:

            DateTime dt1 = new DateTime(2006, 1, 1, 12, 12, 34);
            DateTime dt2 = new DateTime(2006, 1, 2, 15, 13, 45);

            TimeSpan ts = (dt1 - dt1.Date) + (dt2 - dt2.Date);

            Console.WriteLine(ts);
Avatar billede mr_miyagi Nybegynder
01. september 2006 - 12:04 #7
det er noget af det jeg skal bruge..
Hvis du har en tid der starter på 00:00:00
hvordan tilføjer du så fx 30 min til den så den kommer til at stå på 00:30:00

Derefter på et senere tidspunkt tilføjer du så fx 50 min til så den så kommer til at stå på 01:20:00. det kan jeg ikke få den til jeg har forsøgt med:

TimeSpan ts = DateTime.Now.TimeOfDay;
TimeSpan ts2 = DateTime.Add(new TimeSpan(3,0,0));
ts.Add(ts2);

for det denne linie gør:
TimeSpan ts2 = DateTime.Now.TimeOfDay.Add(new TimeSpan(3,0,0));
er at tage tiden fra nu og læg 3 timer til.. jeg skal have en tid som starter på 00:00:00, hvor jeg kan lægge 3 timer til, så den kommer til at stå på 03:00:00
og senere, lægge lyderligere tid til fx 30 min, så der kommer til at stå 03:30:00
Avatar billede spif2001 Nybegynder
01. september 2006 - 12:18 #8
TimeSpan ts = new TimeSpan(0,0,0);
TimeSpan ts2 = DateTime.Now.TimeOfDay.Add(new TimeSpan(3,0,0));
ts.Add(ts2);

senere

TimeSpan ts3 = DateTime.Now.TimeOfDay.Add(new TimeSpan(0,30,0));
ts.Add(ts3);
Avatar billede nielle Nybegynder
01. september 2006 - 12:20 #9
Brug AddMinutes(30)
Avatar billede spif2001 Nybegynder
01. september 2006 - 12:25 #10
ups - glemte at tilføje ts = - prøver igen:

TimeSpan ts = new TimeSpan(0, 0, 0);
Console.WriteLine(ts.Hours + ":" + ts.Minutes + ":" + ts.Seconds);
ts = ts.Add(new TimeSpan(3, 0, 0));
Console.WriteLine(ts.Hours + ":" + ts.Minutes + ":" + ts.Seconds);
ts = ts.Add(new TimeSpan(0, 30, 0));
Console.WriteLine(ts.Hours + ":" + ts.Minutes + ":" + ts.Seconds);

vil skrive:

0:0:0
3:0:0
3:30:0
Avatar billede mr_miyagi Nybegynder
01. september 2006 - 12:28 #11
hvis jeg skriver ts ud (Label1.text = ts + "";)
så skriver den stadig 00:00:00

burde den ikke skrive 03:00:00??
Avatar billede mr_miyagi Nybegynder
01. september 2006 - 12:28 #12
he oh skrev lige for hurtigt... prøver lige det nye du skrev
Avatar billede mr_miyagi Nybegynder
01. september 2006 - 13:11 #13
Så fik jeg det sgu til at virke..

Her metoden:

    protected void btnStop_Click(object sender, EventArgs e)
    {
        lblTimeStop.Text = DateTime.Now.ToShortTimeString();
        strTimeUsed = DateTime.Parse(DateTime.Now.ToShortTimeString()) -DateTime.Parse(lblTimeStart.Text) + "";

        Label1.Text = (int.Parse(strTimeUsed.Substring(0, 2)) + int.Parse(Label1.Text)) + "";
        Label2.Text = (int.Parse(strTimeUsed.Substring(3, 2)) + int.Parse(Label2.Text)) + "";
        min += int.Parse(strTimeUsed.Substring(3, 2));

        ts = ts.Add(new TimeSpan(int.Parse(Label1.Text), int.Parse(Label2.Text), 0));
        ts.Add(ts);

        lblTimeUsed.Text = ts + "";
               
        intMinutes = int.Parse(lblTimeUsed.Text.Substring(0,2)) * 60;
        intMinutes += int.Parse(lblTimeUsed.Text.Substring(3,2));
        lblTotalMin.Text = intMinutes + "";

    }

og så kan man så undre sig over at jeg har lavet det på den måde, men det virker :o)
Beklager jeg kun skrev C# jeg mente asp.net med C#

Spif2001 Hvis du lige vil smide et svar så får du point :o)
Avatar billede nielle Nybegynder
01. september 2006 - 13:15 #14
Må man spørge? Er der nogen dybere mening med alle dine:

... + "";

De har ikke nogen funktion. :^)
Avatar billede nielle Nybegynder
01. september 2006 - 13:16 #15
Hvis det er for at konvertere til string bør man kalde ToString() de relevante steder.
Avatar billede mr_miyagi Nybegynder
01. september 2006 - 13:20 #16
Jeg bruger normalt også ToString(), men jeg har haft noget tekst til at stå mellem "", som jeg sidenhen har slettet igen men, og for at blive fri for at skifte mellem ToString() og "", så har jeg bare beholdt dem indtil metoden bliver helt færdig
Avatar billede spif2001 Nybegynder
01. september 2006 - 13:24 #17
svar - undskyld for fejlkoden i første omgang ;)
Avatar billede mr_miyagi Nybegynder
01. september 2006 - 13:37 #18
Det gør skam ikke noget, Jeg fik det jo til at virke til sidst. :o)
Avatar billede md_craig Nybegynder
06. september 2006 - 11:11 #19
nielle >>

"" + ts; giver "" + ts.ToString();
ts + ""; giver ts.ToString() + "";

Da den jo er sød nok til selv at gøre det så snart man concatisere...
Så det giver faktisk den funktion i hans tilfædle at:

lblTimeUsed.Text = ts; giver formentlig en assign relateret, eller implicit convert relateret exception...

Mens når han bruge Concat, så gør den ikke...

Så kan man som det næste begynde at diskutere hvor vidt man syntes det er en pæn måde at gøre det på... jeg syntes ikke det er... foretrækker en af følgende

ToString, Format eller StringBuilder alt efter hvad "opgaven" er...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester