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

时间:2009-09-11 14:41:09

标签: c# datetime

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

4 个答案:

答案 0 :(得分:12)

DateTime是一个不可变的结构。

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

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

答案 1 :(得分: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;
}

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

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

答案 2 :(得分:1)

通过编写.Date

来消除现有日期时间
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));

答案 3 :(得分:0)

这可能不是完全您正在寻找的内容,但DateTime类有一系列Add方法(AddMinutes(),AddDays()等)。我说这可能不是你想要的,因为它们返回一个DateTime,所以你必须做类似的事情

myDate = myDate.AddMinutes(60);