Làm cách nào để sao chép một đối tượng DateTime trong C #?


89

Làm cách nào để sao chép một đối tượng DateTime trong C #?


6
Tại sao bạn thậm chí cần sao chép a DateTime, nó là bất biến.
Lukazoid

Câu trả lời:


203

DateTime là một kiểu giá trị ( struct)

Điều này có nghĩa là phần sau sẽ tạo ra một bản sao:

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

Bạn cũng có thể làm những việc như:

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

Lưu ý cách trong ví dụ cuối cùng myDateTimeđược khai báo mới trong mỗi chu kỳ; nếu dateReferencebị ảnh hưởng bởi AddHours()hoặc AddMinutes(), myDateTimesẽ biến mất rất nhanh - nhưng không, vì dateReferencevẫn đặt:

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;

DateTimelà một kiểu giá trị, vì vậy khi bạn gán nó, bạn cũng sao chép nó. Điều đó nói rằng, không có ích gì khi nhân bản nó bởi vì nó bất biến; thường thì bạn chỉ sao chép một cái gì đó nếu bạn có ý định thay đổi một trong các bản sao.


1
+1 Đồng ý. Cách tôi giải quyết vấn đề là tạo một đối tượng DateTime mới và chỉ cần sao chép các phần bắt buộc mà tôi muốn sao chép như (ngày, tháng, năm) từ đối tượng datetime ban đầu và sau đó đặt thời gian theo cách thủ công cho đối tượng mới .. .. làm ví dụ.
Dal

12

DateTime là một kiểu giá trị nên mỗi khi bạn gán nó cho một biến mới, bạn đang sao chép.

DateTime foo = DateTime.Now;
DateTime clone = foo;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.