在C#中替换DateTime对象中的日期或时间部分

Rya*_*all 10 c# datetime

我有一个DateTime对象,可能已经或可能没有包含一些日期/时间信息.因此,我需要将时间替换为与日期无关的新时间,反之亦然.我怎么做到这一点?除了创建两个新的DateTime对象之外,我看不到任何明显的东西,一个具有旧/新日期,另一个具有旧/新时间和连接.肯定有比这更好的方法吗?

Ree*_*sey 12

DateTime是一个不可变的结构.

唯一的选择是根据您的两个现有值构造一个新的DateTime结构.这是最好的方法.幸运的是,这是一个班轮:

DateTime CreateNewDateTime(DateTime date, DateTime time)
{
     return new DateTime(date.Year, date.Month, date.Day, time.Hour, time.Minute, time.Second);
}
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 12

我会写两到三个扩展方法:

public static DateTime WithTime(this DateTime date, TimeSpan time)
{
    return date.Date + time;
}

public static DateTime WithDate(this DateTime original, DateTime newDate)
{
    return newDate.WithTime(original);
}

public static DateTime WithTime(this DateTime original, DateTime newTime)
{
    return original.Date + newTime.TimeOfDay;
}
Run Code Online (Sandbox Code Playgroud)

(你真的不需要这两种方法,但如果你把很多电话链接在一起,偶尔也会更简单.)

请注意,您不是根据堆上的项创建任何对象,也不DateTime是结构.