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

Posted

技术标签:

【中文标题】如何在 C# 中克隆 DateTime 对象?【英文标题】:How can I clone a DateTime object in C#? 【发布时间】:2011-05-15 00:05:43 【问题描述】:

【问题讨论】:

为什么还要克隆DateTime,它是不可变的。 【参考方案1】:

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

【讨论】:

【参考方案2】:
var original = new DateTime(2010, 11, 24);
var clone = original;

DateTime 是一种值类型,因此当您分配它时,您也会克隆它。也就是说,克隆它是没有意义的,因为它是不可变的。通常,如果您打算更改其中一个副本,您只会克隆某些内容。

【讨论】:

+1 同意。我解决问题的方法是创建一个新的 DateTime 对象,然后从原始 datetime 对象复制我想要克隆的所需部分,例如(日、月、年),然后为新对象手动设置时间。 ..作为一个例子。【参考方案3】:

DateTime 是一种值类型,因此每次您将其分配给您正在克隆的新变量时。

DateTime foo = DateTime.Now;
DateTime clone = foo;

【讨论】:

以上是关于如何在 C# 中克隆 DateTime 对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中将日期字符串转换为 DateTime 对象? [复制]

如何使用 C# 获取两个 DateTime 对象之间的时差?

如何创建或设置具有最大值的 JodaTime DateTime 对象?

如何将 [Log Content 0] 中 fn_dblog() 详细信息中的 8 字节日期时间转换为 C# DateTime 对象?

如何在 C# 中仅从 DateTime 序列化 Xml 日期

在 C# 中克隆列表 [重复]