Hier ist mein Code:
%Vor%In der letzten Zeile bekomme ich diesen Fehler:
Fehler 1 Der Typ 'System.TimeSpan' kann nicht implizit in 'System.DateTime'
konvertiert werden
Wie subtrahiere ich zwei Daten?
Nun, der Punkt ist, dass, wenn Sie daran denken, Subtraktion eines Datums zu einem anderen kein Datum ergeben sollte, sollte es eine Zeitspanne ergeben. Und das passiert, wenn Sie DateTime.Sutract () verwenden.
%Vor%Damit wird Ihr aktueller Code funktionieren.
Wenn Sie andererseits ein Jahr von Ihrem Datum abziehen möchten, können Sie Folgendes verwenden:
%Vor% Wie bereits erwähnt, gibt date - date Ihnen eine TimeSpan, keine DateTime. Wenn Sie eine DateTime möchten, verwenden Sie AddDays(-1)
wie in:
Das Ergebnis eines Datumsvergleichs ist ein TimeSpan, kein DateTime-Wert.
Sie möchten dies tun:
%Vor%.Subtract hat zwei Überladungen. Man akzeptiert eine DateTime und gibt eine TimeSpan zurück, die andere akzeptiert eine TimeSpan und gibt eine DateTime zurück.
Mit anderen Worten, wenn Sie ein Datum von einem Datum subtrahieren, erhalten Sie die Zeitdifferenz. Andernfalls, wenn Sie eine Zeitspanne von einem Datum subtrahieren, erhalten Sie ein neues Datum.
Können Sie erklären, was Sie versuchen zu berechnen? Der Unterschied zwischen zwei beliebigen Daten in C # oder im wirklichen Leben ist eine Zeitspanne. Wenn Sie versuchen, Alter zu berechnen, dann was Sie wollen, ist die Zeitspanne seit ihrer Geburt. Ändern Sie Date2 in
%Vor%Sie ziehen zwei Daten in Ihrem Code korrekt ab. Was passiert ist, dass Sie erwarten, dass der Unterschied zwischen den beiden Daten ein anderes Datum sein wird, und das ist nicht der Fall.
Wie andere Poster bemerkt haben, erhalten Sie TimeSpan
. Aus deinen variablen Namen habe ich den Eindruck, dass du versuchst, das Alter einer Person herauszufinden.
Alter ist kein Datum, es ist eine Dauer. Lesen Sie das TimeSpan
-Objekt und Sie werden feststellen, dass es die gesuchte Idee richtig ausdrückt.
Ich bin nicht 0029-01-01 Jahre alt, ich bin 29 Jahre alt. (Heute ist nicht mein Geburtstag, aber angenommen, es ist für die einfache Mathematik.)
Wenn Sie versuchen, das Alter einer Person in einem Steuerelement anzuzeigen, und dieses Steuerelement ein DateTime
haben möchte, verwenden Sie wahrscheinlich das falsche Steuerelement dafür.
Sie erwarten, dass der Unterschied zweier Daten ein Datum ist, das nicht übereinstimmt. Wenn Sie jedoch eine bestimmte Anzahl von Tagen oder Monaten subtrahieren müssen, können Sie dies einfach mit den integrierten Methoden des DateTime-Objekts tun, z. B. .AddDays (-1) . Beachten Sie, dass I Benutzte eine negative Zahl zum Subtrahieren, du kannst das Gegenteil anwenden. Hier ist ein kurzes Beispiel.
%Vor% Nicht genau eine Antwort auf Ihre Frage, aber ich bevorzuge die Verwendung von var
, anstatt die Variablen mit Typen zu kommentieren. var
IMO lässt Code sauberer aussehen als sonst.
Hier ist Ihr Code-Snippet mit var
s:
BEARBEITEN :
Für die C # -Entwickler mit der var-is-bad-Denkweise:
[Original Beitrag Hier ]
Ich verwende var extensiv. Da war Kritik, dass dies die reduziert Lesbarkeit des Codes, aber nein Argument, um diesen Anspruch zu unterstützen.
Zugegeben, es kann bedeuten, dass es nicht so ist klar, mit welchem Typ wir es zu tun haben. Na und? Das ist eigentlich der Sinn von ein entkoppeltes Design. Beim Umgang mit Schnittstellen sind Sie ausdrücklich nicht interessiert sich für den Typ eine Variable hat. var nimmt das viel weiter, stimmt, aber Ich denke, dass das Argument das bleibt Gleiches aus Sicht der Lesbarkeit: Der Programmierer sollte eigentlich nicht sein interessiert am Typ der Variable sondern was eine Variable tut. Aus diesem Grund ruft Microsoft auch den Typ an Inferenz "Ente tippen."
Also, was macht eine Variable, wenn ich deklariere es mit var? Einfach, das tut es was auch immer IntelliSense mir sagt tut. Irgendeine Argumentation über C #, die Ignoriert die IDE nicht Wirklichkeit. In der Praxis ist jeder C # -Code in einer IDE programmiert, die unterstützt IntelliSense.
Wenn ich eine var deklarierte Variable verwende und verwirrt werden, was die Variable ist Da ist etwas grundsätzlich falsch mit meinem Code. var ist nicht die Ursache, es macht nur die Symptome sichtbar. Mach dir nicht die Schuld Bote.
Nun hat das C # -Team eine Codierung veröffentlicht Richtlinie besagt, dass var nur sollte verwendet werden, um das Ergebnis von a zu erfassen LINQ-Anweisung, die ein erstellt anonymer Typ (weil wir hier haben keine echte Alternative zu Var). Gut, Schrauben Sie das. So lange wie das C # -Team gibt mir kein vernünftiges Argument dafür Diese Richtlinie werde ich ignorieren es weil in meinem Beruf und persönliche Meinung, es ist reiner Quatsch. (Sorry; ich habe keinen Link zu der Richtlinie in Frage.)
Tatsächlich gibt es einige (oberflächlich) gute Erklärungen zu warum solltest du var nicht benutzen aber ich trotzdem glaube, sie sind weitgehend falsch. Nehmen das Beispiel der "Suchbarkeit": der Autor behauptet, dass var macht es schwer um nach Orten zu suchen, wo MyType ist benutzt. Recht. Also Schnittstellen. Eigentlich, warum sollte ich es wissen wollen? Wo wird die Klasse verwendet? ich könnte mehr daran interessiert, wo es ist instanziiert und dies wird immer noch sein suchbar, weil irgendwo sein Konstruktor muss aufgerufen werden (auch wenn Dies geschieht indirekt, der Typname muss irgendwo erwähnt werden). - Konrad Rudolph