Як я можу клонувати об'єкт DateTime у C #?


89

Як я можу клонувати об'єкт DateTime у C #?


6
Навіщо вам навіть потрібно клонувати a DateTime, це незмінно.
Луказоїд

Відповіді:


203

DateTime - це тип значення ( struct)

Це означає, що наступне створює копію:

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

Ви також можете безпечно робити такі речі:

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

Зверніть увагу, як в останньому прикладі myDateTimeоголошується заново за кожним циклом; якщо dateReferenceбули порушені AddHours()або AddMinutes(), myDateTimeщо я побрів дуже швидко - але це не так, тому що dateReferenceзалишається на місці:

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є типом значення, тому, призначаючи його, ви також клонуєте його. Тим не менш, немає сенсу його клонувати, оскільки він незмінний; як правило, ви б клонували щось лише тоді, коли мали намір змінити одну з копій.


1
+1 Погоджено. Я вирішив проблему шляхом створення нового об'єкта DateTime і просто скопіювання необхідних частин, які я хотів клонувати, таких як (день, місяць, рік), з початкового об'єкту datetime, а потім встановлення часу для нового об'єкта вручну .. .. як приклад.
Даль,

12

DateTime - це тип значення, тому кожного разу, коли ви призначаєте його новій змінній, яку ви клонуєте.

DateTime foo = DateTime.Now;
DateTime clone = foo;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.