我在代码中使用了很多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);
答案 0 :(得分:18)
保留秒,毫秒和较小部分时间的更好方法是:
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;
}
恕我直言DateTime
是.NET中最薄弱的部分之一。例如,TimeSpan
与TimeOfDay
不同也不能代表'TimePeriod'(以月为单位) - 这是三个独立的概念,将它们混合起来是一个糟糕的选择。移动到DateTimeOffset
通常是首选,或者是优秀的Noda时间库。
答案 1 :(得分:13)
根据您提供的信息,我认为这种方法很好。如果你想避免经常重写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);
}
}