Bagaimana saya bisa mengkloning objek DateTime di C #?


89

Bagaimana saya bisa mengkloning objek DateTime di C #?


6
Mengapa Anda bahkan perlu mengkloning DateTime, itu tidak bisa diubah.
Lukazoid

Jawaban:


203

DateTime adalah tipe nilai (struct )

Ini berarti bahwa berikut ini membuat salinan:

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

Anda juga dapat melakukan hal-hal seperti:

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

Perhatikan bagaimana contoh terakhir myDateTimedideklarasikan lagi di setiap siklus; jika dateReferencetelah terpengaruh oleh AddHours()atau AddMinutes(), myDateTimeakan mengembara dengan sangat cepat - tetapi tidak, karena dateReferencetetap diam:

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;

DateTimeadalah tipe nilai, jadi saat Anda menetapkannya, Anda juga akan mengkloningnya. Meskipun demikian, tidak ada gunanya mengkloningnya karena tidak dapat diubah; biasanya Anda hanya akan mengkloning sesuatu jika Anda berniat mengubah salah satu salinannya.


1
+1 Setuju. Cara saya mengatasi masalah ini adalah dengan membuat objek DateTime baru dan hanya menyalin bagian yang diperlukan yang ingin saya klon seperti (hari, bulan, tahun) dari objek datetime asli dan kemudian mengatur waktu secara manual untuk objek baru .. .. sebagai contoh.
Dal

12

DateTime adalah tipe nilai jadi setiap kali Anda menetapkannya ke variabel baru, Anda kloning.

DateTime foo = DateTime.Now;
DateTime clone = foo;
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.