none
DateTimePicker - Subtraktion von Differenz zweier DTP (Uhrzeit) RRS feed

  • Frage

  • Hallo, ich habe ein Problem beim Berechnen meiner Zeiten.

    Es besteht der DTP start, ende und Abzug.

    Ich rechne also ende.value - start.value, was soweit auch funktioniert. Nur wenn ich jetzt meinen Abzug von der Differenz der DTP start und ende abziehen will, bekomm ich diese Fehlermeldung:

    Error 1 Operator '-' cannot be applied to operands of type 'System.TimeSpan' and 'System.DateTime'

    Ok, was ich jetzt nicht verstehe ist, dass ich zuvor doch schon "-" gerechnet habe.

    Warum erweißt sich dann eine weitere Subtraktion einer vorher erechneten Zeit als Error?

    Eventuell kann mir ja jemand weiter helfen, oder einen besseren Lösungsweg vorschlagen. Danke im Voraus!

    • Bearbeitet xyfz Donnerstag, 28. März 2013 17:04
    Donnerstag, 28. März 2013 16:59

Antworten

  • Hallo,

    wenn man 2 DateTime (Zeitpunkt) subtrahiert dann entsteht ein TimeSpan (Zeitspanne). Eine Möglichkeit wäre folgende:

                DateTime start = new DateTime(1000);
                DateTime ende = new DateTime(100);
                DateTime abzug = new DateTime(500);
    
                TimeSpan s = (start - ende) - new TimeSpan(abzug.Ticks);
                Console.WriteLine(s.Ticks);
    An sich kannst du auch noch etwas mit der Subtract und der Add...-Methode herum probieren. Bei einem DateTime kann man beispielsweise auch TiemSpans abziehen.


    <Code:13/> - Koopakiller [kuːpakɪllɐ]
    Webseite | Code Beispiele | Facebook | Snippets
    Wenn die Frage beantwortet ist, dann markiert die hilfreichsten Beiträge als Antwort und bewertet die Beiträge. Danke.

    Donnerstag, 28. März 2013 18:01
    Moderator
  • Hi xyfz,

    beim DateTimePicker bekommst du ein Datum mit Uhrzeit zurück.

    Da die nur die Zeit interessiert kannst du daraus deine Timespan erzeugen.

    new TimeSpan(Stunden, Minuten, Sekunden)

    MFG

    Björn

    Freitag, 29. März 2013 19:13
  • Ok, hab es soweit hinbekommen. Ist zwar nicht sauber aber funktioniert.

    (Start.Value - Ende.Value) - (Abzug.Value - Nichts)

    So konnte er es rechnen. Nichts steht für einen DateTimePicker der ständig auf 00:00 steht und nicht sichtbar ist.

    Danke euch trotzdem für die  Antworten!

    • Als Antwort markiert xyfz Freitag, 29. März 2013 19:16
    Freitag, 29. März 2013 19:16

Alle Antworten

  • Hallo,

    wenn man 2 DateTime (Zeitpunkt) subtrahiert dann entsteht ein TimeSpan (Zeitspanne). Eine Möglichkeit wäre folgende:

                DateTime start = new DateTime(1000);
                DateTime ende = new DateTime(100);
                DateTime abzug = new DateTime(500);
    
                TimeSpan s = (start - ende) - new TimeSpan(abzug.Ticks);
                Console.WriteLine(s.Ticks);
    An sich kannst du auch noch etwas mit der Subtract und der Add...-Methode herum probieren. Bei einem DateTime kann man beispielsweise auch TiemSpans abziehen.


    <Code:13/> - Koopakiller [kuːpakɪllɐ]
    Webseite | Code Beispiele | Facebook | Snippets
    Wenn die Frage beantwortet ist, dann markiert die hilfreichsten Beiträge als Antwort und bewertet die Beiträge. Danke.

    Donnerstag, 28. März 2013 18:01
    Moderator
  • Ich danke dir schon mal für die Antwort. Werde morgen weiter daran arbeiten und das ausprobieren.

    Bis dahin schönen Abend noch!

    Donnerstag, 28. März 2013 18:51
  • So hab gerade noch etwas rummprobiert, aber bin leider nicht wirklich weiter gekommen.

    Habe versucht deine Methode in WinForms umzusetzten, aber kam aufs gleiche raus wie davor auch schon.

    TimeSpan mo = (dtmone.Value - dtmons.Value) - new TimeSpan(dtDeduction.Value);

    Eigentlich sollte es ja leicht sein das umzusetzen, aber ich komme nicht darauf :(

    Freitag, 29. März 2013 18:22
  • Hi xyfz,

    ich gehe mal aus das dtDeduction ein Datum ist. Der Konstruktor von TimeSpan hat aber keine Überlagerung mit DateTime.

    Wenn du mal angibst was du berechnen Möchtest, kann man dir sicher auch weiterhelfen, wie man es berechnet.

    MFG

    Björn

    Freitag, 29. März 2013 18:43
  • Ja na klar, es geht um Uhrzeiten, die vom User über DateTimePicker angegeben werden können.

    Format ist HH:mm.

    dtDeduction ist einfach ein Abzug, z.B. 00:50. Also 50 Minuten.

    Nun wird eben durch den User z.B. 08:00 Uhr als Startzeit angegeben und 16:00 Uhr als Endzeit.

    Differenz von Ende und Start, um die Zeitspanne zu erechnen:

    (dtmone.Value - dtmons.Value)

    Und nun soll eben der Abzug von dieser Differenz abgezogen werden.

    Also beispielsweise errechne ich in der Differenz 8 Stunden und will davon 50 Minuten abziehen.

    Freitag, 29. März 2013 18:49
  • Hi xyfz,

    beim DateTimePicker bekommst du ein Datum mit Uhrzeit zurück.

    Da die nur die Zeit interessiert kannst du daraus deine Timespan erzeugen.

    new TimeSpan(Stunden, Minuten, Sekunden)

    MFG

    Björn

    Freitag, 29. März 2013 19:13
  • Ok, hab es soweit hinbekommen. Ist zwar nicht sauber aber funktioniert.

    (Start.Value - Ende.Value) - (Abzug.Value - Nichts)

    So konnte er es rechnen. Nichts steht für einen DateTimePicker der ständig auf 00:00 steht und nicht sichtbar ist.

    Danke euch trotzdem für die  Antworten!

    • Als Antwort markiert xyfz Freitag, 29. März 2013 19:16
    Freitag, 29. März 2013 19:16