如何在C#中克隆DateTime对象?


Answers:


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对象复制想要克隆的所需部分,例如(日,月,年),然后手动为新对象设置时间。 .. 举个例子。
达尔

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.