Wie kann ich ein DateTime-Objekt in C # klonen?


88

Wie kann ich ein DateTime-Objekt in C # klonen?


6
Warum sollten Sie überhaupt ein klonen müssen DateTime, es ist unveränderlich.
— Lukazoid

Antworten:


201

DateTime ist ein Werttyp ( struct)

Dies bedeutet, dass Folgendes eine Kopie erstellt:

DateTime toBeClonedDateTime = DateTime.Now;
DateTime cloned = toBeClonedDateTime;

Sie können auch sicher Dinge tun wie:

var dateReference = new DateTime(2018, 7, 29);
for (var h = 0; h < 24; h++) {
  for (var m = 0; m < 60; m++) {
    var myDateTime = dateReference.AddHours(h).AddMinutes(m);
    Console.WriteLine("Now at " + myDateTime.ToShortDateString() + " " + myDateTime.ToShortTimeString());
  }
}

Beachten Sie, wie im letzten Beispiel myDateTimein jedem Zyklus neu deklariert wird. Wenn ich dateReferencevon AddHours()oder betroffen gewesen wäre AddMinutes(), myDateTimewäre ich sehr schnell weggegangen - aber das tut es nicht, weil es so dateReferencebleibt:

Now at 2018-07-29 0:00
Now at 2018-07-29 0:01
Now at 2018-07-29 0:02
Now at 2018-07-29 0:03
Now at 2018-07-29 0:04
Now at 2018-07-29 0:05
Now at 2018-07-29 0:06
Now at 2018-07-29 0:07
Now at 2018-07-29 0:08
Now at 2018-07-29 0:09
...
Now at 2018-07-29 23:55
Now at 2018-07-29 23:56
Now at 2018-07-29 23:57
Now at 2018-07-29 23:58
Now at 2018-07-29 23:59

25
var original = new DateTime(2010, 11, 24);
var clone = original;

DateTimeist ein Werttyp. Wenn Sie ihn also zuweisen, klonen Sie ihn auch. Das heißt, es macht keinen Sinn, es zu klonen, weil es unveränderlich ist; Normalerweise würden Sie etwas nur klonen, wenn Sie die Absicht hätten, eine der Kopien zu ändern.


1
+1 Einverstanden. Ich habe das Problem umgangen, indem ich ein neues DateTime-Objekt erstellt und einfach die erforderlichen Teile, die ich klonen wollte, wie (Tag, Monat, Jahr), aus dem ursprünglichen Datum / Uhrzeit-Objekt kopiert und dann die Zeit für das neue Objekt manuell festgelegt habe. .. als Beispiel.
— Dal

11

DateTime ist ein Werttyp. Jedes Mal, wenn Sie ihn einer neuen Variablen zuweisen, klonen Sie ihn.

DateTime foo = DateTime.Now;
DateTime clone = foo;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.