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

本文关键字:时间部 保留 日期部 DateTime | 更新日期: 2023-09-27 18:28:54

我在代码中使用了许多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);

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

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

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

或者,您可以制作一个扩展方法,将新日期应用于现有的DateTime,同时不相信新日期上没有TimeOfDay:-

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

IMHO DateTime是.NET中最薄弱的部分之一。例如,TimeSpanTimeOfDay不同,也不能表示"TimePeriod"(以月为单位)-这是三个独立的概念,将它们混合在一起是一个糟糕的选择。移动到DateTimeOffset通常是优选的,或者移动到优秀的Noda时间库。

根据您提供的信息,我认为这种方法很好。如果您想避免经常重写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);
    }
}