如何只保留DateTime的日期部分,同时保留时间部分?

我在代码中使用了很多DateTime。 我想将这些DateTimes更改为我的特定日期并保留时间。

1. "2012/02/02 06:00:00" => "2015/12/12 : 06:00:00" 2. "2013/02/02 12:00:00" => "2015/12/12 : 12:00:00" 

我使用这种风格来改变,但它似乎不是好方法,我想问任何方法来实现这个任务。

 DateTime newDateTime = new DateTime(2015,12,12,oldDateTime.Hour,oldDateTime.Minute,0); 

根据您提供的信息,我认为这种方法很好。 如果你想避免经常重写oldDateTime.Hour,oldDateTime.Minute,0件,你可以创建自己的静态类来简化方法调用。

在您的常规申请中:

 class Program { static void Main(string[] args) { DateTime time = DateTime.Now; DateTime newDateTime = MyDateTimeUtil.CreateDateFromTime(2015, 12, 12, time); } } 

创建DateTime值的静态类:

 public static class MyDateTimeUtil { public static DateTime CreateDateFromTime(int year, int month, int day, DateTime time) { return new DateTime(year, month, day, time.Hour, time.Minute, 0); } } 

保留秒,毫秒和较小部分时间的更好方法是:

 DateTime newDateTime = new DateTime(2015,12,12) + oldDateTime.TimeOfDay; 

或者您可以使用扩展方法将新Date应用于现有DateTime,同时不信任新日期没有TimeOfDay: –

 public static DateTime WithDate (this DateTime datetime, DateTime newDate) { return newDate.Date + datetime.TimeOfDay; } 

IMHO DateTime是.NET中最薄弱的部分之一。 例如, TimeSpanTimeOfDay也不能代表’TimePeriod’(以月计) – 这是三个独立的概念,将它们混合起来是一个糟糕的选择。 一般来说,移动到DateTimeOffset或者是优秀的Noda时间库。