C #: Wie subtrahiere ich zwei Daten?

7

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?

    
l--''''''---------'''''''''''' 12.04.2010, 19:14
quelle

11 Antworten

19

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%     
devoured elysium 12.04.2010, 19:15
quelle
3

Wie bereits erwähnt, gibt date - date Ihnen eine TimeSpan, keine DateTime. Wenn Sie eine DateTime möchten, verwenden Sie AddDays(-1) wie in:

%Vor%     
Charles Bretana 12.04.2010 19:21
quelle
1

Das Ergebnis eines Datumsvergleichs ist ein TimeSpan, kein DateTime-Wert.

Sie möchten dies tun:

%Vor%     
James Westgate 12.04.2010 19:18
quelle
1

.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.

    
Anthony Pegram 12.04.2010 19:19
quelle
1

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%     
QueueHammer 12.04.2010 19:29
quelle
1

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.

    
Broam 12.04.2010 19:47
quelle
1

Versuchen Sie es mit Ticks ...?

%Vor%     
Cipi 12.04.2010 20:11
quelle
0

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%     
SubZero 12.04.2010 20:13
quelle
0

Verwenden Sie diesen Code:

%Vor%     
Kumar Manish-PMP 29.11.2011 11:12
quelle
0

TimeSpan Beispiel:

%Vor%     
jhersey29 09.12.2015 00:22
quelle
-2

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:

%Vor%

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

    
missingfaktor 23.05.2017 10:27
quelle

Tags und Links