C# 替换C中DateTime对象中的日期或时间段#

C# 替换C中DateTime对象中的日期或时间段#,c#,datetime,C#,Datetime,我有一个DateTime对象,它可能包含也可能不包含某些日期/时间信息。因此,我需要用我的新时间来代替时间,与日期无关,反之亦然。我将如何实现这一点?除了创建两个新的DateTime对象之外,我看不到任何明显的东西,一个是旧/新日期,另一个是旧/新时间并连接。肯定有比这更好的方法吗?日期时间是一个不可变的结构 唯一的选择是基于两个现有值构造一个新的DateTime结构。这是最好的办法。幸运的是,这是一条单行线: DateTime CreateNewDateTime(DateTime date,

我有一个DateTime对象,它可能包含也可能不包含某些日期/时间信息。因此,我需要用我的新时间来代替时间,与日期无关,反之亦然。我将如何实现这一点?除了创建两个新的DateTime对象之外,我看不到任何明显的东西,一个是旧/新日期,另一个是旧/新时间并连接。肯定有比这更好的方法吗?

日期时间是一个不可变的结构

唯一的选择是基于两个现有值构造一个新的DateTime结构。这是最好的办法。幸运的是,这是一条单行线:

DateTime CreateNewDateTime(DateTime date, DateTime time)
{
     return new DateTime(date.Year, date.Month, date.Day, time.Hour, time.Minute, time.Second);
}

我将编写两个或三个扩展方法:

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;
}
(第二种方法确实不需要同时使用,但如果将大量调用链接在一起,有时可能会更简单。)


请注意,您没有根据堆上的项创建任何对象,因为
DateTime
是一个结构

这可能不完全是您想要的,但是DateTime类有一系列Add方法(AddMinutes()、AddDays()等)。我说这可能不是你想要的,因为它们返回一个日期时间,所以你必须做一些类似的事情

myDate = myDate.AddMinutes(60);

通过写入.Date从现有datetime中删除时间

DateTime new = oldDate.Date;
通过分别添加小时、分钟和秒来添加时间

DateTime new = oldDate.Date.AddHours(14).AddMinutes(12).AddSeconds(33);
或者一下子

DateTime new = oldDate.Date.AddSeconds(51153);
或者添加一个TimeSpan()

DateTime new = oldDate.Date.Add(new TimeSpan(14,12,33));