Come posso clonare un oggetto DateTime in C #?


89

Come posso clonare un oggetto DateTime in C #?


6
Perché dovresti anche dover clonare un file DateTime, è immutabile.
Lukazoid

Risposte:


203

DateTime è un tipo di valore ( struct)

Ciò significa che quanto segue crea una copia:

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

Puoi anche fare cose come:

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());
  }
}

Nota come nell'ultimo esempio myDateTimevenga dichiarato di nuovo in ogni ciclo; se dateReferencefosse stato colpito da AddHours()o AddMinutes(), myDateTimesarebbe andato via molto velocemente, ma non lo fa, perché dateReferencerimane fermo:

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

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

DateTimeè un tipo di valore, quindi quando lo assegni lo cloni anche. Detto questo, non ha senso clonarlo perché è immutabile; normalmente cloneresti qualcosa solo se avessi l'intenzione di cambiare una delle copie.


1
+1 concordato. Il modo in cui ho aggirato il problema era creare un nuovo oggetto DateTime e copiare semplicemente le parti richieste che volevo clonare come (giorno, mese, anno) dall'oggetto datetime originale e quindi impostare l'ora manualmente per il nuovo oggetto. .. come esempio.
Dal

12

DateTime è un tipo di valore, quindi ogni volta che lo assegni a una nuova variabile che stai clonando.

DateTime foo = DateTime.Now;
DateTime clone = foo;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.