是否有更有效的方法来展平DateTime对象的Date部分而不是创建新的DateTime实例?

时间:2016-05-11 09:02:02

标签: c# datetime

我有一系列日期时间,我需要将日期药水弄平,只保留时间值。

注意:做这种奇怪事情背后的原因是我们使用第三方组件使用Date Part来做出某些决定。此外,我找到了一种不同的解决方法,但我仍然很好奇是否有更有效的方法来实现这一目标。

我能想到的唯一方法是创建具有相同日期但具有来自各个源DT对象的时间的新DateTime对象。

这是我不喜欢的方法的简单示例。

    DateTime flattenDts(DateTime input)
    {
        return new DateTime(1, 1, 1, input.Hour, input.Minute, input.Second);
    }

如你所见,这看起来并不是很好。特别是当有数百个日期时间值时。

有没有更有效的方法来实现这一目标?

修改 请注意,我不能使用timespan作为第三方lib。只会采用DateTime参数。

3 个答案:

答案 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,但这不是必需的。