我有一系列日期时间,我需要将日期药水弄平,只保留时间值。
注意:做这种奇怪事情背后的原因是我们使用第三方组件使用Date Part来做出某些决定。此外,我找到了一种不同的解决方法,但我仍然很好奇是否有更有效的方法来实现这一目标。
我能想到的唯一方法是创建具有相同日期但具有来自各个源DT对象的时间的新DateTime对象。
这是我不喜欢的方法的简单示例。
DateTime flattenDts(DateTime input)
{
return new DateTime(1, 1, 1, input.Hour, input.Minute, input.Second);
}
如你所见,这看起来并不是很好。特别是当有数百个日期时间值时。
有没有更有效的方法来实现这一目标?
修改 请注意,我不能使用timespan作为第三方lib。只会采用DateTime参数。
答案 0 :(得分:5)
没有更有效的方法可以做到这一点,但你可以通过编写扩展方法来减少你需要做的输入量:
public static class DateTimeExt
{
public static DateTime Flatten(this DateTime self)
{
return new DateTime(1, 1, 1, self.Hour, self.Minute, self.Second);
}
}
然后展平日期的代码将如下所示:
DateTime test = DateTime.Now;
var flattened = test.Flatten();
它并不多,但也许它会有所帮助。
答案 1 :(得分:1)
根据DateTime
的{{3}},属性是只读的。这意味着基本上DateTime
是不可变的;如果需要修改内容,则只能使用新对象。简而言之,没有更有效的解决方案。
答案 2 :(得分:1)
我认为使用构造
会更有效率new DateTime(input.TimeOfDay.Ticks)
为了便于使用(如果需要也可以更改实现),将其放在扩展方法中,如@Matthew Watson所建议的那样。我会称之为TruncateDate
,但这不是必需的。